【问题标题】:Function, which outputs the sum of the digits of an integer in C++?函数,它在 C++ 中输出整数的数字之和?
【发布时间】:2018-01-24 13:30:47
【问题描述】:

我编写了一个函数,它应该打印给定整数的所有数字的总和。但是程序输出不正确的结果,它应该输出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;
}

【问题讨论】:

  • 显示预期输出、实际输出和您的调试尝试。
  • 将数字转换为字符串,然后将字符串的每个字符转换回整数可能会容易得多。不过,这可能会慢得多。
  • 你知道在 C++ 中也有 &gt;=&lt;= 运算符
  • 你得到的输出是什么?
  • 您不必将数字存储到向量中,您可以直接将它们相加。

标签: c++ sum digits


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
    int tmp = 0;
    

    记住在函数内部,tmp默认不会被初始化!

    【讨论】:

      【解决方案3】:

      您忘记将 sum 初始化为 0 (sum = 0;)

      #include <iostream>
      using namespace std;
      
      int sumDigits(int n)
      {
          int tmp = 0;
          while(n>0) {
              tmp+=n%10;
              n/=10;
          }
          return tmp;
      }
      
      int main()
      {
          cout<<sumDigits(12745);
          return 0;
      }
      

      【讨论】:

        【解决方案4】:

        如果n&gt;9,您的sumDigits 实现不会初始化tmp,这完全符合您的示例所涵盖的情况。因此,tmp+=a[i] 不断向一个充满垃圾的整数添加东西​​。

        【讨论】:

          【解决方案5】:

          您必须将 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;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-05
            • 2018-06-27
            • 1970-01-01
            相关资源
            最近更新 更多