我正在编制一个数字总和的程序,看看这个程序:
#include<iostream>
using namespace std;
int main(){
int i, j;
int sum=1;
cout<<"Enter your sum: "<<endl;
cin>>i;
while(i>0){
j=i%10;
sum=sum+j;
i=i/10;
}
cout<<"Sum: "<<sum;
cout<<endl;
}
因此,当我输入25
作为输出时,它会将我作为输出7
。
但是我希望在每个总和的单个数字中使用它,比如说我输入147
。它给了我一个输出10
,但我希望1
作为输出。
我知道可以这样做:
while(i>0){
j=i%10;
sum=sum+j;
i=i/10;
}
cout<<"Sum: "<<sum/10;
肯定会给我输出1
。
但是当我输入一个数字185
时,它会给我一个输出1
..但我想要整数位数。
如果我输入185
输出必须假设为
1+8+5=14
1+4=5
输出必须是5
..所以请帮我解决这类问题。
答案 0 :(得分:6)
您描述的内容称为digital root。有趣的是,它可以通过简单地确定除以9时的余数来计算 - 而0则用9代替。
unsigned digitalRoot(unsigned i)
{
return 1 + (i-1)%9; // if i%9==0, (i-1)%9==8 and adding 1 yields 9
}
digitalRoot(185)
自5
起为185 = 9*20 + 5
。
答案 1 :(得分:2)
当我输入输出为25时,它会将我作为输出7。
不,实际上是8
(demo)。问题是您将sum
初始化为1
而不是0
。
只要使总和为一位数,就可以在程序中添加另一个循环:
for (;;) { // Loop until the break is reached
while(i>0){
j=i%10;
sum=sum+j;
i=i/10;
}
if (sum < 10) break; // It's single digit
i = sum;
sum = 0;
}
答案 2 :(得分:1)
你可以试试这个:
while(i>0){
j=i%10;
sum=sum+j;
i=i/10;
if (i == 0 && sum >= 10) // if all the digits of previous number is processed and sum is not a single digit
{
i = sum;
sum = 0;
}
}
请注意,没有嵌套循环!
不要忘记将sum
初始化为0
而不是1
。
答案 3 :(得分:0)
import java.util.*;
public class SingleDigit
{
public static void main(String[] args)
{
int number = 0, temp = 0, result = 0;
Scanner inp = new Scanner(System.in);
System.out.print("Enter the Number :");
number = inp.nextInt();
temp = number;
while(temp>0)
{
result = result + (temp%10);
temp = temp/10;
if(result > 9)
result = (result % 10)+(result / 10);
}
System.out.println("Single Digit Number for the Number "+number+" is :" result);
System.out.println("Thank You KING....");
}
}