我开始自己学习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)
时,它会循环,但不会计算数字。
我将非常感谢您的帮助和解释。
附:对不起我的英语,我不是母语人士。
答案 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;
}