-2

//程序打印数字总和

#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)

输入否时不打印正确答案。从 1 或 0 开始。

通过使用 While (n>0),它给出了正确的输出,但我不知道为什么?

4

1 回答 1

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循环就会停止其​​迭代,并且不会处理该数字。

于 2021-05-19T06:26:58.677 回答