函数,它输出C ++中整数的位数之和?

时间:2018-01-24 13:30:47

标签: c++ sum digits

我编写了一个应该打印给定整数的所有数字之和的函数。但是程序输出的结果不正确,应该输出19.我想问为什么会这样?该计划输出2686935。

#include <iostream>
#include <vector>
using namespace std;
vector <int> a;
int sumDigits(int n)
{
    int tmp;
    if((n>1 && n<9) || n==1 || n==9)
    {
        tmp=n;
        return tmp;
    }
    while(n>9)
    {

        a.push_back(n%10);
        n/=10;
        if((n>1 && n<9) || n==1 || n==9)
        {
            a.push_back(n);
        }
    }
    for(int i=0; i<a.size(); i++)
    {

        tmp+=a[i];

    }
    return tmp;
}
int main()
{
    cout<<sumDigits(12745);
    return 0;
}

5 个答案:

答案 0 :(得分:4)

这太复杂了。这应该有效(负数除外)

int sumDigits(int n)
{
    int total = 0;
    while (n > 0)
    {
        total += n%10;
        n /= 10;
    }
    return total;
}

循环中n%10和n / 10的组合会为您提供数字中的每个数字,然后将它们相加。

原始代码中的错误是tmp未初始化为零。

答案 1 :(得分:1)

int tmp = 0;

请记住,在函数内部,默认情况下不会初始化tmp!

答案 2 :(得分:1)

你忘了初始化为0(sum = 0;)

"buttons":[
  {
    "type":"web_url",
    "url":"https://petersfancyapparel.com/criteria_selector",
    "title":"Select Criteria",
    "webview_height_ratio": "full",
    "messenger_extensions": true,  
    "fallback_url": "https://petersfancyapparel.com/fallback"
  }
]

答案 3 :(得分:0)

sumDigits的实施不会初始化tmp if n>9,这完全符合您的示例所涵盖的情况。因此,tmp+=a[i]继续向填充垃圾的整数添加内容。

答案 4 :(得分:0)

您必须将tmp变量设置为0
这是您更正后的代码:

#include <iostream>
#include <vector>
using namespace std;
vector <int> a;
int sumDigits(int n)
{
    int tmp=0;

    if((n>1 && n<9) || n==1 || n==9)
    {
        tmp=n;
        return tmp;
    }
    while(n>9)
    {

        a.push_back(n%10);
        n/=10;
        if((n>1 && n<9) || n==1 || n==9)
        {
            a.push_back(n);
        }
    }
    for(int i=0; i<a.size(); i++)
    {

        tmp+=a[i];

    }
    return tmp;
}
int main()
{
    cout<<sumDigits(12745);
    return 0;
}