一个简单的程序,对数字进行计数和求和。我怎样才能使它工作?

时间:2012-09-30 21:30:51

标签: c++ sum sum-of-digits

所以我要编写一个简单的程序(循环),你可以输入一个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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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。

答案 3 :(得分: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;
    }
}