拆分整数并找到最大的和C ++

时间:2015-10-13 22:27:20

标签: c++

我开始自己学习C ++,而且我对我想要完成的一项任务感到困惑。用户shoud键入自然数字,只要他想要,直到他输入0.之后,我的程序应找到最大的数字总和并打印出来。它还打印出一个数字,从中得出总和。 这是我试图做的:

#include <iostream>
#include <string>
using namespace std;

int main() 
{
    int input = 0;
    int digit;
    int sum = 0;
    int largest = 0;

    do
    {
        cout << "enter a natural number (0 if done): " << flush;
        cin >> input;

        while (input > 0)
        {
            digit = input % 10;
            sum = sum + digit;
            input = input / 10;
        }
        if (sum > largest)
            largest = sum;  

    } while (input);

    cout << "Max sum of digits was " << largest << "for" << endl;
}

当我运行程序时,它只计算第一个输入数字的数字总和并停止工作。当我离开while (input > 0)时,它会循环,但不会计算数字。 我将非常感谢您的帮助和解释。 附:对不起我的英语,我不是母语人士。

4 个答案:

答案 0 :(得分:2)

do
{
    cout << "enter a natural number (0 if done): " << flush;
    cin >> input;
    //more code
} while (input); 

为了使其正常工作,input可能不会在cin和循环条件之间发生变化。

但是

while (input > 0) {
    digit = input % 10;
    sum = sum + digit;
    input = input / 10;
}

确实会更改input

将其替换为

int input2 = input;
while (input2 > 0) {
    digit = input2 % 10;
    sum = sum + digit;
    input2 = input2 / 10;
}

答案 1 :(得分:2)

你似乎有三个问题:

1 - 您正在尝试使用在while循环中基本上设置为零的变量

2 - 您似乎在寻找最大金额的输入

3 - 您没有为每个输入重置和变量

第一个问题的解决方案是&#34; backup&#34;在修改它之前输入另一个变量并将该变量用于while循环。

这也允许您获得输入的最大数字并存储它。

int input = 0;
int inputBackup = 0;
int digit;
int sum = 0;
int largest = 0;
int largestInput = 0;

要添加inputBackup变量,请将其放在cin

之后

然后在largestInput if语句中设置sum > largest以设置largestInput是否为最大值。

cout << "enter a natural number (0 if done): " << flush;
cin >> input;

inputBackup = input;// This line
sum = 0;            // and this line

while (input > 0)
{
    digit = input % 10;
    sum = sum + digit;
    input = input / 10;
}
if (sum > largest)
{
    largest = sum;
    largestInput = inputBackup;// Store largest input
}

然后将while(input)更改为while(inputBackup)以检查inputBackup变量而不是input变量。

将您的cout更改为将largestInput变量添加到其中

cout << "Max sum of digits was " << largest << " for " << largestInput << endl;

你的代码应该修好了!

快乐的编码!

答案 2 :(得分:1)

尝试改为

如果我们没有归零sum值,它会累积所有输入数字的总和,并且总和将始终大于largest值,因为它存储当前值数字的largest + sum 。因此,如果我们将sum值归零,它只包含当前输入的数字总和,并且与之前的largest相比可以很简单。

#include <iostream>
#include <conio.h>

using namespace std;



int main() {

    int input = 0;
    int digit;
    int sum = 0;
    int largest = 0;

    do
    {
        while (input > 0) {
            digit = input % 10;
            sum = sum + digit;
            input = input / 10;
            }
                if (sum > largest)
                    largest = sum;

        sum = 0; // set to 0 current sum

        cout << "enter a natural number (0 if done): " << flush;
        cin >> input;

    } while (input);

   cout << "Max sum of digits was " << largest << " for" << endl;

   _getch();

   return 0;
}

答案 3 :(得分:1)

在这部分:

while (input > 0) {
  digit = input % 10;
  sum = sum + digit;
  input = input / 10;
}

虽然输入不为零,但它会重复,所以当离开循环时,输入的值为0.使用辅助变量或将此代码包含在函数中:

 int getDigitsSum(int input) {
      while (input > 0) {
        digit = input % 10;
        sum = sum + digit;
        input = input / 10;
      }
      return sum;
 }