-1

所以我必须编写一个简单的程序(循环),您可以在其中输入一个 int 并输出数字计数和数字总和。由于我在编程方面很迟钝,所以我只是在网上搜索代码并尝试将其拼凑起来。我猜总和块螺丝带有n,但我不太确定。无论如何,如果有人能指出错误并告诉我如何让它发挥作用,我将不胜感激。

#include <iostream>
using namespace std;

int main()
{
    while(1)
    {
        int i,p,n,sum=0;  //sum block
        cout<<"enter an int: ";
        cin>>n;

        {
            while(n!=0)
            {
                p=n % 10;
                sum+=p;
                n=n/10;
            }
            cout<<"int digit sum: "<<sum <<endl;
        }
        {
            int count = 0;
            while(n)
            {
                n /= 10;
                ++count;
            }
            cout <<"number of digits: " << count << '\n';
        }
    }
}
4

4 回答 4

3

由于您使用的循环是破坏性的(即它们n在循环结束时归零),您需要将两个循环合并为一个:

int sum=0, count=0;
while(n!=0)
{
    count++;
    sum += n%10;
    n /= 10;
}
于 2012-09-30T21:41:23.857 回答
0

如果您试图获得数字的总和,请使用此代码。数字中的位数。

#include <iostream>
using namespace std;

int main()
{

    int i, p, n, sum=0, count = 0;  //sum block
    cout<<"enter an int: ";
    cin>>n;

    while(n!=0)
    {
        p=n % 10;
        sum+=p;
        count++;
        n=n/10;
    }

    cout<<"int digit sum: "<<sum<<endl;
    cout<<"count of digits: "<<count<<endl;
 }

您的第二个 while 循环while(n)将永远不会执行,因为n直到那时的值将变为 0。

于 2012-09-30T21:41:48.817 回答
0

您需要在第一个循环之前保存 n 的副本,以便在第二个循环中使用它。

于 2012-09-30T21:34:37.293 回答
0

我猜总和块螺丝带有n,但我不太确定

您猜对了:您在第一个嵌套循环中进行了更改。 n在为零之前您不会退出该循环n......所以现在它为零!

作为参考,我可能会将它的结构更像这样,以避免必须保留一个明确的副本......

#include <iostream>
using namespace std;

int sum_of_digits(int n);
int num_of_digits(int n);

int main()
{
    while(1)
    {
        cout << "enter an int: ";
        int n;
        cin >> n;

        cout << "sum of digits: " << sum_of_digits(n) << endl;
        cout << "num of digits: " << num_of_digits(n) << endl;
    }
}

int sum_of_digits(int n)
{
    int sum = 0;
    while(n)
    {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int num_of_digits(int n)
{
    int count = 0;
    while(n)
    {
        ++count;
        n /= 10;
    }
}
于 2012-09-30T21:51:15.000 回答