能否基于数字展开式实现数字反转?求相关算法方案
基于数字展开式实现数字反转的方法
你提供的标准数字反转C语言代码如下:
#include <stdio.h> int main() { int result=0; int q,n,rem; printf("enter number: "); scanf("%d",&n); q=n; while(q!=0){ rem=q%10; result=result*10+rem; q=q/10; } printf("reversed number is: %d",result); return 0; }
确实存在基于数字展开式的数字反转方法,核心逻辑和你举例的一致——把原数字的每一位按反转后的位置,乘以对应10的幂次再相加。比如输入123,反转后的321就是3*100 + 2*10 + 1*1。
具体实现思路
- 先确定原数字的位数,比如123是3位数,反转后最高位对应的幂次是
10^(3-1)=100; - 依次提取原数字的每一位(从个位开始);
- 把提取的数字乘以当前对应的10的幂次,累加到结果中;
- 每处理一位,幂次除以10,直到所有位处理完成。
对应的C语言代码实现
方法一:使用数学库计算幂次
#include <stdio.h> #include <math.h> int main() { int n, original, digitCount = 0; long long reversed = 0; // 用long long避免大数字溢出 printf("enter number: "); scanf("%d", &n); original = n; // 统计数字的位数 while (original != 0) { original /= 10; digitCount++; } original = n; // 按展开式计算反转结果 while (original != 0) { int lastDigit = original % 10; reversed += lastDigit * pow(10, digitCount - 1); original /= 10; digitCount--; } printf("reversed number is: %lld\n", reversed); return 0; }
方法二:手动计算幂次(无需数学库)
#include <stdio.h> int main() { int n, original, digitCount = 0; long long reversed = 0, power = 1; printf("enter number: "); scanf("%d", &n); original = n; // 统计位数同时计算最高位的幂次 while (original != 0) { original /= 10; digitCount++; if (digitCount > 1) { power *= 10; } } original = n; while (original != 0) { int lastDigit = original % 10; reversed += lastDigit * power; original /= 10; power /= 10; } printf("reversed number is: %lld\n", reversed); return 0; }
代码说明
- 统计位数是为了确定每一位对应的10的幂次,保证数字能放到反转后的正确位置;
- 使用
long long存储结果,避免原数字接近int最大值时出现溢出; - 两种方法核心逻辑一致,第二种手动计算幂次的方式可以避免引入
math.h库,减少依赖。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

