给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
结果:
执行用时: 0 ms
内存消耗: 5.7 MB
代码
#include<stdlib.h>
#include <string.h>
class Solution {
public:
int reverse(int x) {
int num=0;
char oldData[100],newData; // 转换成字符串进行操作
//oldData = strcpy("%d",x);
//strcpy(oldData,("%d",x));
//itoa(x,oldData,10);
snprintf(oldData, sizeof(oldData), "%d", x);
//oldData = x;
int length = strlen(oldData); // 获取数据长度
int head,foot,middle;
if(x>0)
{
num=0;
for(int i=num;i<length/2;i++)
{
middle = oldData[i];
oldData[i] = oldData[length-i-1];
oldData[length-i-1] = middle;
}
//判断越界
if(length==10 )
{
int tag = (oldData[0]-'0')*100000+(oldData[1]-'0')*10000+(oldData[2]-'0')*1000+(oldData[3]-'0')*100+(oldData[4]-'0')*10+(oldData[5]-'0');
if(tag >= 214748)
{
tag = (oldData[6]-'0')*1000+(oldData[7]-'0')*100+(oldData[8]-'0')*10+(oldData[9]-'0');
if(tag>3647)
return 0;
}
}
}
else
{
num=1;
char head = '-';
for(int i=num;i<length/2+1;i++)
{
middle = oldData[i];
oldData[i] = oldData[length-i];
oldData[length-i] = middle;
}
//判断越界
if(length==11 )
{
int tag = (oldData[1]-'0')*100000+(oldData[2]-'0')*10000+(oldData[3]-'0')*1000+(oldData[4]-'0')*100+(oldData[5]-'0')*10+(oldData[6]-'0');
if(tag >= 214748)
{
tag = (oldData[7]-'0')*1000+(oldData[8]-'0')*100+(oldData[9]-'0')*10+(oldData[10]-'0');
if(tag>3648)
return 0;
}
}
}
x = atoi(oldData);
if (errno == ERANGE)
{
return 0;
}
return x;
}
};