使用数学取余数的公式暴力解法(8ms)
写的很乱,可读性差:
1.没有考虑完转化之前与之后的溢出问题(采用long替换int)
2.c/c++中的取余数的运算和一般的数学运算不同,负数的取余数会出 现余数为负数
3.采用if else 显得太麻烦
4.写代码前想好变量的命名
int reverse(int m){
//需要将int类型的数据转化为单个的字符
//题目已经指明是整数数字。采用数学公式将高位转化为低位
//使用一个零时变量来保存翻转的中间过程
//难点在于判断移除 是不是需要提前将int数字转化为double数字
long tmp = 0; int i = 0;
long x = (long)m;
long y = x;
printf("%f",pow(2,31));
if((y > (pow(2,31)-1)) || (y < (pow(-2,31)))){
printf("%f",pow(2,31));
return 0;
}
if(y<0){
y = -y;
while(y!=0){
y = y/10;
i++;
}
x = (long)(-x);
while( x != 0){
tmp += (x%10) * pow(10,i-1);
x = x/10;
i--;
printf("%d",tmp);
}
tmp = -tmp;
}
else{
while(y != 0){
y = y/10;
i++;
}
while( x != 0){
tmp += (x%10) * pow(10,i-1);
x = x/10;
i--;
}
}
printf("%f",tmp);
if((tmp > (pow(2,31)-1)) || (tmp < (pow(-2,31)))){
printf("%f",(int)tmp);
return 0;
}
return (int)tmp;
}
他人的效率为0ms的思路上有优化(除了使用了C语言负数取余数为负的特性)
少使用了一层循环:
while (x) {
rev = rev*10 + x % 10;
x/=10;
}
int reverse(int x){
long y=0;
while(x!=0)
{
y=y*10+x%10;
x=x/10;
}
if(y>2147483647||y<-2147483648)
return 0;
else return y;
}