C++ 如何用一位数字求和?

C++ 如何用一位数字求和?,c++,C++,我正在做一个数字求和的程序,看看这个程序: #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;

我正在做一个数字求和的程序,看看这个程序:

#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;
}
当然,它会给我一个输出作为
1

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....");
    }
}
但是当我输入一个数字时,它会给我一个输出。。但我要数字的总和

如果我输入
185

输出必须假定为

1+8+5=14
1+4=5

并且输出必须是
5
。。所以请帮我解决这类问题。

您所描述的被称为a。有趣的是,它可以通过简单地确定除以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

当我输入输出为25时,它会给我输出为7

不,它实际上是
8
()。问题是您将
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;
}
(;;){//循环的
,直到达到中断
而(i>0){
j=i%10;
sum=sum+j;
i=i/10;
}
if(sum<10)break;//是个位数
i=总和;
总和=0;
}
您可以尝试以下方法:

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

您只需重复该过程,直到结果为一个位数。重复->你需要一个(n个外)环。@KarolyHorvath;不需要使用外环。@rajivmishra,由你决定。对我来说,两个循环以一种更清晰的方式向读者展示了代码背后的意图,因为如果你想用铅笔和纸运行算法,你基本上要写下算法的功能。对我来说,将两个逻辑循环压缩成代码中的一个循环是错误的,但这只是我的观点。C++被标记为问题。
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....");
    }
}