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

Split an integer and find the largest sum C++

本文关键字:C++ 整数 一个 拆分      更新时间:2023-10-16

我开始自己学习C++,我对我试图完成的一项作业感到困惑。用户只要愿意,就可以输入自然数,直到他输入 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)拿走时,它会做一个循环,但不计算数字。我将非常感谢您的帮助和解释。附言对不起我的英语,我不是母语人士。

你在这里似乎有三个问题:

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

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

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

第一个问题的解决方案是在修改输入并将该变量用于 while 循环之前将输入"备份"到另一个变量中。

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

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

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

然后在 sum > largest if 语句中设置largestInput,以设置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;

你的代码应该被修复!

祝您编码愉快!

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;
}

在这一部分中:

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;
 }

试试吧

如果我们不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;
}