这周的题目很简单,因为简单,就写了两种方法,一种是“直接法”,效率较低,一种是“曲线法”,效率高一些,下面来看题目吧。。。
题目:反转一个32位的int整数,然后把整数的每一位倒过来。比如:x=123,返回321
题目比较简单,但有两点需要注意,第一点是整数的符号(正负),另一点就是溢出问题,如果溢出,则返回0.下面来看看我的代码(假设给出的整数位x)
//整数介于-10到10之间不需要反转
if (-10 < x && x < 10)
return x;
//处理整数的符号(正负)
int sign = 0;
if (x < 0) {
sign = 1;
x = -x;
}
/*曲线法:效率较高,将数字转化为字符串,将反向遍历的新字符串转化成整数
int count = 1,num = x;
while(num >=10) {
num /= 10;
count++;
}
char tempStr[count],resultStr[count];
sprintf(tempStr,"%d",x);
for (int i = 0; i < count ; i++) {
int temp = count - i - 1;
resultStr[i] = tempStr[temp];
}
long result = atol(resultStr);*/
//直接法:效率较低,直接将整数进行反转
long result = 0;
while (x != 0) {
result = result * 10 + x % 10;
x /= 10;
}
//还原整数的符号
if (sign) {
result = -result;
}
//判断是否溢出
if (INT32_MAX < result || result < INT32_MIN) {
return 0;
}else {
return result;
}
在做这道算法题的时候发现了个奇怪的问题,就是当我使用曲线法中的sprintf()函数以后,我的printf函数就失效了,在控制台就不输出任何内容,后来发现是添加一个\n换行符即可,否则系统以为后面还有。。。