函数,在 C++ 中输出一个整数的数字之和?
Function, which outputs the sum of the digits of an integer in C++?
我写了一个函数,它应该打印给定整数的所有数字的总和。但是程序输出的结果不正确,应该输出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;
}
太复杂了。这应该有效(负数除外)
int sumDigits(int n)
{
int total = 0;
while (n > 0)
{
total += n%10;
n /= 10;
}
return total;
}
循环中 n%10 和 n/10 的组合给出数字中的每个数字,然后将它们相加。
您的原始代码中的错误是 tmp
未初始化为零。
int tmp = 0;
记住在函数内部,默认情况下不会初始化tmp!
您忘记将 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;
}
如果 n>9
,您的 sumDigits
实现不会初始化 tmp
,这完全符合您的示例所涵盖的情况。因此,tmp+=a[i]
继续向充满垃圾的整数添加内容。
您必须将 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;
}
我写了一个函数,它应该打印给定整数的所有数字的总和。但是程序输出的结果不正确,应该输出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;
}
太复杂了。这应该有效(负数除外)
int sumDigits(int n)
{
int total = 0;
while (n > 0)
{
total += n%10;
n /= 10;
}
return total;
}
循环中 n%10 和 n/10 的组合给出数字中的每个数字,然后将它们相加。
您的原始代码中的错误是 tmp
未初始化为零。
int tmp = 0;
记住在函数内部,默认情况下不会初始化tmp!
您忘记将 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;
}
如果 n>9
,您的 sumDigits
实现不会初始化 tmp
,这完全符合您的示例所涵盖的情况。因此,tmp+=a[i]
继续向充满垃圾的整数添加内容。
您必须将 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;
}