2022年7月19日 第四组 周鹏 整数反转,,,我的头发没了!!!

今天做了一个很难的题,给大家分享一番

 

题目:

 

知识点     Math.pow(n, i)    的意思是,n的i次方,不过需要用双精度浮点型的类型才能赋值。

 

开始拿到这个题,那真是一点思路都没有,啥玩意儿?整数?反转?你确定不是字符串?

在确定没有之后,我开始了今天的脱发之旅:

大致的思路就是:

先分正负,可以只做正的,负的可以直接般代码,用0去减负数就ok,但要注意数的大小,建议减的时候用long

 

1,先找出这个数是多少位的,但由于要求要是在   负2的31次方和2的31次方减一    这个区间段内,所以我设置了一个数组长度为10的数组。

然后通过判断   (x / Math.pow(10, i))<10   这个,从而用  d   记录下x是多少位的。

 

2,找到后,用for循环一个一个的记录下来x的位数,并用相反的位置在数组中记录。

具体操作请看下面

 

3,遍历数组,然后通过一个一个新的项乘上10的n次方,然后得到一个反转后的数

 

判断这个数的大小,满足则输出

不满足则输出0

     int x = -123;
        int d = 0;//记录x的最大位数
        double b = 0.0;//取x的每一位数
        int[] a = new int[10];//记录下取的每一位数
        double f=0;//保存返回后的数
        if (x >=0) {
         1,   for (int i = 0 ; i <10;i++){
                if((x / Math.pow(10, i))<10){
                    d=i;
                    break;
                }
            }//找x的最大位数。

       2,     for (int i = d; i >= 0; i--) {
                int e = 0;
                b =(x / Math.pow(10, i));
                e=(int)b;
                a[i] = e;
                x -= (e*Math.pow(10, i));

            }//将反转后的数字一个一个赋值在数组里
            for(int c :a){
                f +=( c*Math.pow(10, d));
                d--;

            }
            if(f>(Math.pow(2, 31)-1)){
                System.out.println(0);
            }else {
                int o = (int)f;
                System.out.println(o);
            }
        }
      //开始负数的判断
      else { long n=(0L-x); for (int i = 0 ; i <10;i++){ if((n / Math.pow(10, i))<10){ d=i; break; } }//找x的最大位数。 for (int i = d; i >= 0; i--) { int e = 0; b =(n / Math.pow(10, i)); e=(int)b; a[i] = e; n -= (e*Math.pow(10, i)); }//将反转后的数字一个一个赋值在数组里 for(int c :a){ f +=( c*Math.pow(10, d)); d--; }
long o=(long)(0L-f); if(o<(-Math.pow(2, 31))){ System.out.println(0); }else { System.out.println(o); } }

 

posted @ 2022-07-20 20:13  牛杂刻师傅  阅读(47)  评论(0)    收藏  举报