修改这个代码#include "stdio.h" int reverse(long int n) { long int t; for (; n != 0; n /= 10) { t = t * 10 + n % 10; } for(;n!=0; )//使用循环,对 n 反转 { n /= 10; t = t * 10 + n % 10; } return t; } int palindrome(long int n) { if(n == reverse(n))//调用 reverse 函数,判断原数字和反转数是否相等 return 1; else return 0; } int main() { long n,m; int count=0; printf("Please input a positive integer:"); scanf("%ld",&n); printf("Palindrome Numbers are generated as follows:\n"); /*不是回文字数字,将其倒过来后与原来的正整数相加*/ while(!palindrome((m=reverse(n))+n)) { if(n>0&&m+n<n) //数据溢出 { printf("over flow error!\n"); break; } else { printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n);//输出每次转换过程 n+=m; } } printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n); return 0; }
时间: 2024-01-09 14:04:44 浏览: 66
这段代码中有一个问题:在 reverse 函数中,t 变量没有初始化。应该将 t 的初始值设为 0。
修改后的代码如下:
```
#include "stdio.h"
int reverse(long int n) {
long int t = 0;
for (; n != 0; n /= 10) {
t = t * 10 + n % 10;
}
return t;
}
int palindrome(long int n) {
if(n == reverse(n))
return 1;
else
return 0;
}
int main() {
long n, m;
int count = 0;
printf("Please input a positive integer:");
scanf("%ld", &n);
printf("Palindrome Numbers are generated as follows:\n");
while(!palindrome((m=reverse(n))+n)) {
if(n > 0 && m + n < n) {
printf("overflow error!\n");
break;
} else {
printf("[%d]:%ld+%ld=%ld\n", ++count, n, m, m+n);
n += m;
}
}
printf("[%d]:%ld+%ld=%ld\n", ++count, n, m, m+n);
return 0;
}
```
修改后的代码中,t 在 reverse 函数中被初始化为 0。此外,当数据溢出时,输出的错误信息从 "over flow error!" 改为 "overflow error!"。
阅读全文