给定一个数,求其位数之和。
例子 :
输出
输出
输出
输出
Input : n = 687 Output : 21 Input : n = 12 Output : 3给定数字中数字总和的通用算法:
- 获取数字
- 声明一个变量来存储总和并将其设置为 0
- 重复接下来的两个步骤,直到数字不为 0
- 在余数 '%' 运算符的帮助下,将数字除以 10,然后将其加到 sum 中,得到最右边的数字。
- 在“/”运算符的帮助下将数字除以 10 以删除最右边的数字。
- 打印或返回总和
// 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;
}
输出
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
104
// 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