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); } }
浙公网安备 33010602011771号