循环验证5个整数是否为回文:首项正确后续错误排查求助
问题分析与修复方案
嘿,这问题其实挺常见的——你没在每次处理新数字前重置reverse变量的值!
咱们来拆解下为什么第一个输入正确,后面全错:
- 第一次进入外层循环时,
reverse的初始值是0,反转计算完全正常,对比store得到正确结果。 - 但从第二个输入开始,
reverse还保留着上一次反转后的数值,新的反转计算是在这个旧值基础上累加的,结果自然和实际反转值差了十万八千里。
举个例子:假设第一个输入是121,反转后reverse变成121;第二个输入是123,这时候计算反转时,reverse一开始是121,然后执行reverse = 121*10 + 3 = 1213,接着1213*10 +2=12132,最后12132*10+1=121321,这和store里的123完全不相等,所以会错误输出“Not a palindrome”。
修复后的代码
把reverse的初始化移到外层循环内部,每次处理新数字前都重置为0:
int count = 0; int n, store, reverse; while (count < 5) { reverse = 0; // 关键:每次循环都重置reverse为0 cin >> n; store = n; while (n > 0) { reverse = reverse * 10 + n % 10; n = n / 10; } if (store == reverse) { cout << "it's a palindrome " << endl; } else { cout << "Not a palindrome " << endl; } count++; }
这样每次处理新的输入整数时,反转计算都会从0开始,得到正确的反转值,对比store就能输出正确结果啦~
内容的提问来源于stack exchange,提问作者scypx
相关产品推荐
相关产品推荐

