如何用一位数求和?

时间:2014-10-04 10:07:20

标签: 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;

    }
    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 ..所以请帮我解决这类问题。

4 个答案:

答案 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。

不,实际上是8demo)。问题是您将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....");
    }
}