拆分一个整数并找到最大的总和C++
Split an integer and find the largest sum C++
我开始自己学习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;
}
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 如何在C++中将整数转换为其数字数组