自己所写没有凭据,但自己想到的测试没错,若有错希望大家指出。(类似123000这种情况源码中未写,但思路给出。相信这不是啥难题)。
思路:
原始输入oriNum,最终数endNum
if(oriNum % 10 !=9 && oriNum % 100 !=0)
endNum = oriNum -9;
else if(oriNum % 100 ==0)
1.找到第一个不为0的数位a(将其减一);
2.a的下一位加一
3.其余位不变
else(处理类似1234999这种末位有几位9的情况){
设置两个标志位flag1(末位含9的位数)和flag2(输入数据位数)
if(flag1 == flag2 || flag1 ==(flag2-1))
System.out.println("抱歉,您输入的数字无解");
else{
oriNum的第flag1+2位变为原数减一
oriNum的第flag1+1至倒数第二位变为9
oriNum的末位变为flag1+1位的数据+1
}
}
代码:
package com.donghao;
import java.util.Scanner;
public class HeXiangtong {
public static void main(String[] args){ System.out.println("请输入一个大于10的整数"); Scanner scan = new Scanner(System.in); int oriNum = scan.nextInt(); int lastNum=0; int[] arr = new int[100];//存取oriNum的逆序int[] endArr;//记录oriNum转换后的值,仍未倒序,此处倒着读取 int i=0;//便于给arr赋值 int flag1=0,flag2=0;//标识原数子有几个九,如果有flag1=flag2个则无解 int length=0;//所给数据位数 //最简单的数处理方式129934 if(oriNum % 10 !=9 && oriNum % 100 !=0){ lastNum = oriNum -9; System.out.println("The Nearest number is:" + lastNum); } //143000->000431(思路最初不为0的数位减1,末位加1) else if(oriNum % 100 ==0){int power =1;
while(oriNum % 10 == 0){ oriNum /= 10; power = power * 10; } oriNum = oriNum -1; lastNum = oriNum * power + (power / 10); System.out.print("The Nearest number is:" + lastNum); } //类似于199999这种情况 else{ //取最左边9的个数和数据位数 while(true){ if(oriNum % 10 == 9){ flag1++; flag2++; arr[i++] = 9; } if(oriNum % 10 !=9){ flag2++; arr[i++] = oriNum % 10; } oriNum = oriNum / 10; if(oriNum <1){ arr[i] =oriNum; break; } } length = flag2; for(int j=0;j<length;j++){ System.out.print(arr[j] + " "); } System.out.println("flag1=" + flag1); System.out.println("flag2=" + flag2); //处理类似于199999这种情况 if(flag1 == flag2 || flag1 ==(flag2-1)) System.out.println("抱歉,您输入的数字无解"); //类似于123999这种情况 else{ endArr = new int[length]; endArr[0] = arr[flag1]+ 1; for(int k=1;k<length;k++){ if(k<=flag1){ endArr[k] = arr[k-1]; }else if(k==(flag1+1)){ endArr[k] =arr[flag1 +1] -1; } else{ endArr[k] = arr[k]; } } System.out.print("最终结果"); for(int j=length-1;j>=0;j--){ System.out.print(endArr[j]); } } } } }