这是一道c语言和java基础的时候都会涉及的一道题,先来一个简单容易理解的做法,大概思路就是这个数每次除以10,不等于0就加一位,逆序输出时分不同情况获取每一位数字。
public static void main(String[] args) {
System.out.print("请输入一个不多于5位数的正整数:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a;int b;int c;int d;int e;int w=0;
if(n/10000!=0) w++;
if(n/1000!=0) w++;
if(n/100!=0) w++;
if(n/10!=0) w++;
if(n!=0) w++;
System.out.print("这个正整数是"+w+"位数:");
//判断位数,也可以用n/=10即n=n/10来判断
if(w==1){
System.out.println(n);
}else if(w==2){
a=n/10;
b=n-a*10;
System.out.println(a+""+b);
System.out.println("倒序输出为:"+b+""+a);
}else if(w==3){
a=n/100;
b=(n-a*100)/10;
c=n-a*100-b*10;
System.out.println(a+""+b+""+c);
System.out.println("倒序输出为:"+c+""+b+""+a);
}else if(w==4){
a=n/1000;
b=(n-a*1000)/100;
c=(n-a*1000-b*100)/10;
d=n-a*1000-b*100-c*10;
System.out.println(a+""+b+""+c+""+d);
System.out.println("倒序输出为:"+d+""+c+""+b+""+a);
}else{
a=n/10000;
b=(n-a*10000)/1000;
c=(n-a*10000-b*1000)/100;
d=(n-a*10000-b*1000-c*100)/10;
e=n-a*10000-b*1000-c*100-d*10;
System.out.println(a+""+b+""+c+""+d+""+e);
System.out.println("倒序输出为:"+e+""+d+""+c+""+b+""+a);
}
}
运行结果
另一种思路就是分别写每一个过程的函数,这样写可以处理任意位数的数字(当然需要在整型范围之内),参考如下
//获取位数
public static int getBit(int n){
int count=0;
while (n>0){
n/=10;
count++;
}
return count;
}
//获取每一位数字
public static int[] getEveryNumber(int n){
int[] arr=new int[getBit(n)];
int a=0;
int count=0; //标志
while (n>0){
a=n%10;n/=10; //把余数放进一个数组
arr[arr.length-1-count++]=a;
}
return arr;
}
//逆置
public static int reverse(int[] brr){
int result=0;int a=0;
for(int i=0;i<brr.length;i++){
result+=((Math.pow(10,a++))*brr[i]); //每一位数乘以相应的10的次方
}
return result;
}
public static void main(String[] args) {
System.out.print("请输入一个正整数:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] brr=getEveryNumber(n);
System.out.println("位数为:"+getBit(n));
System.out.println("每位数为:"+Arrays.toString(getEveryNumber(n)));
System.out.println("逆置为:"+reverse(brr));
}
运行结果