[C语言] 将32位 int有符号类型的十进制数据 反转输出
最近遇到了个离线考试, 没办法上网查资料, 但是作为一个高度依赖网络字典库记忆各种库函数的衰仔, 非常头痛,
故而结束考试后, 尝试编写一个无需任何库函数就可以实现32位的 int有符号类型 十进制数据 反转输出. 如输入123456 输出 654321; 负数保留负号.
存此笔记, 以作个人警示.
示例代码中 #include <stdio.h> 单纯是为了打印和 兼容scanf输入 故而实现该功能并不需要这个东西,.
char i;
char m;
char wei[10] = {0};
wei[0] = abs(x % 10);
wei[1] = abs(x / 10 % 10);
wei[2] = abs(x / 100 % 10);
wei[3] = abs(x / 1000 % 10);
wei[4] = abs(x / 10000 % 10);
wei[5] = abs(x / 100000 % 10);
wei[6] = abs(x / 1000000 % 10);
wei[7] = abs(x / 10000000 % 10);
wei[8] = abs(x / 100000000 % 10);
wei[9] = abs(x / 1000000000 % 10);
//使用分治思想进行数据可能会溢出判断
if ((wei[0] != 0) && (wei[9] != 0)) {
//数据绝对会溢出判断
if (abs(wei[0]) > 2) {
return 0;
} else if (abs(wei[0]) == 2) {
//判断第二位数据反转会不会溢出
if (wei[1] > 1) {
return 0;
} else if (wei[1] == 1) {
//判断第三位数据反转会不会溢出
if (wei[2] > 4) {
return 0;
} else if (wei[2] == 4) {
//判断第四位数据反转会不会溢出
if (wei[3] > 7) {
return 0;
} else if (wei[3] == 7) {
//判断第五位数据反转会不会溢出
if (wei[4] > 4) {
return 0;
} else if (wei[4] == 4) {
//判断第六位数据反转会不会溢出
if (wei[5] > 8) {
return 0;
} else if (wei[5] == 8) {
//判断第七位数据反转会不会溢出
if (wei[6] > 3) {
return 0;
} else if (wei[6] == 3) {
//判断第八位数据反转会不会溢出
if (wei[7] > 6) {
return 0;
} else if (wei[7] == 6) {
//判断第九位数据反转会不会溢出
if (wei[8] > 4) {
return 0;
} else if (wei[8] == 4) {
//判断第十位数据反转会不会溢出
if (x > 0 && wei[9] > 7) {
return 0;
}
if (x < 0 && wei[9] > 8) {
return 0;
}
}
}
}
}
}
}
}
}
}
}
for (i = 9; i >= 0; i--) {
if (wei[i] != 0)
break;
}
m = i;
if (x < 0) {
for (x = 0; i >= 0; i--) {
x += wei[i] * pow(10, (m - i));
}
return -x;
} else {
for (x = 0; i >= 0; i--) {
x += wei[i] * pow(10, (m - i));
}
return x;
}