1. 主页
  2. 文档
  3. C语言教程
  4. C语言案例实战
  5. C语言给定数字的数字总和程序

C语言给定数字的数字总和程序

给定一个数,求其位数之和。

例子 : 

Input : n = 687
Output : 21

Input : n = 12
Output : 3

给定数字中数字总和的通用算法:

  1. 获取数字
  2. 声明一个变量来存储总和并将其设置为 0
  3. 重复接下来的两个步骤,直到数字不为 0
  4. 在余数 ‘%’ 运算符的帮助下,将数字除以 10,然后将其加到 sum 中,得到最右边的数字。
  5. 在“/”运算符的帮助下将数字除以 10 以删除最右边的数字。
  6. 打印或返回总和

以下是获得数字总和的解决方案。 
1. 迭代:

// C program to compute sum of digits in
// number.
#include <stdio.h>

/* Function to get sum of digits */
int getSum(int n)
{
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
}

// Driver code
int main()
{
int n = 687;
printf(" %d ", getSum(n));
return 0;
}

输出

21

如何在 一行中计算? 
下面的函数有三行而不是一行,但它计算的是一行中的总和。如果我们将指针传递给 sum,它可以变成一行函数。 

#include <stdio.h>

/* Function to get sum of digits */
int getSum(int n)
{
int sum;

/* Single line that calculates sum */
for (sum = 0; n > 0; sum += n % 10, n /= 10)
;

return sum;
}

// Driver code
int main()
{
int n = 687;
printf(" %d ", getSum(n));
return 0;
}

输出

21

2.递归

算法 :

1) 获取数字
2)获取余数并传递下一个剩余数字
3) 在余数 '%' 运算符的帮助下,将数字除以 10,然后将其加到 sum 中,得到最右边的数字。
   在“/”运算符的帮助下将数字除以 10 以删除最右边的数字。
4) 检查 n = 0 的基本情况
5) 打印或返回总和
// C program to compute
// sum of digits in number.
#include <stdio.h>

int sumDigits(int no)
{
if(no == 0){
return 0 ;
}

return (no % 10) + sumDigits(no / 10) ;
}

int main()
{
printf("%d", sumDigits(687));
return 0;
}

输出

21

3.将输入作为字符串

当该数字的位数超过 10 19时,我们不能将该数字视为整数,因为 long long int 的范围不满足给定的数字。所以将输入作为一个字符串,从开始到字符串的长度运行一个循环,并用那个字符增加总和(在这种情况下它是数字)

下面是上述方法的实现

// C++ implementation of the above approach
#include <iostream>
using namespace std;
int getSum(string str)
{
int sum = 0;

// Traversing through the string
for (int i = 0; i < str.length(); i++) {
// Since ascii value of
// numbers starts from 48
// so we subtract it from sum
sum = sum + str[i] - 48;
}
return sum;
}

// Driver Code
int main()
{
string st = "123456789123456789123422";
cout << getSum(st);
return 0;
}

输出

104

4.使用尾递归 

这个问题也可以使用尾递归来解决。这是解决它的一种方法。

1.向函数添加另一个变量“Val”并将其初始化为(val = 0)

2. 在每次调用函数时,将 mod 值 (n%10) 添加到变量中,即“(n%10)+val”,即 n 中的最后一位数字。将变量 n 作为 n/10 传递。 

3. 所以在第一次通话时,它将有最后一位数字。当我们将 n/10 作为 n 传递时,它遵循直到 n 减少到一位数。 

4. n<10 是基本情况,所以当 n < 10 时,将 n 添加到变量中,因为它是最后一位数字,并返回将具有数字总和的 val

// C++ program for the above approach
#include <iostream>
using namespace std;

// Function to check sum
// of digit using tail recursion
int sum_of_digit(int n, int val)
{
if (n < 10)
{
val = val + n;
return val;
}
return sum_of_digit(n / 10, (n % 10) + val);
}

// Driver code
int main()
{
int num = 12345;
int result = sum_of_digit(num, 0);

cout << "Sum of digits is " << result;

return 0;
}

输出

Sum of digits is 15
这篇文章对您有用吗?