问题描述
//打印数字和的程序
#include <iostream>
using namespace std;
int main()
{
int n,m,sum = 0;
cin >> n;
for(int i = 0; i < n; i++)
{
m = n % 10;
sum += m;
n = n / 10;
}
cout << sum;
}
//Outputs
// Input = 123
// Output = 5 (should be 6)
// Input = 0235
// Ouput = 8 (should be 9)
输入no时不打印正确答案。从 1 或 0 开始。
通过使用 While (n>0),它提供了正确的输出,但我不知道为什么?
解决方法
对于初学者,用户可以输入负数,因为变量 n
的类型是有符号类型 int
。
因此两者都不循环
for(int i = 0; i < n; i++)
或
while (n>0)
将是正确的。
正确的循环看起来像
while ( n != 0 )
并且您需要将获得的每个数字转换为非负值,或者您应该对变量 n
使用无符号整数类型。
至于这个循环
for(int i = 0; i < n; i++)
那就完全没有意义了。
例如让我们假设 n
最初等于 123
,
在这种情况下,在循环的第一次迭代中,循环的条件看起来像
0 < 123
在循环的第二次迭代中,它看起来像
1 < 12
在循环的第三次迭代中,它看起来像
2 < 1
这意味着不会执行循环的第三次迭代。
因此,只要数字的最后一位数字小于或等于索引 i
的当前值,循环就会停止其迭代并且不会处理该数字。