java给一个不多于5位的正整数 ①输出它是几位数 ②分别输出每一位数字 ③按逆序输出各位数字

这是一道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));
}

运行结果
在这里插入图片描述

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值