输入整数并显示单个数和数之和
Input integer and display individual number and sum of numbers
编写一个程序,提示用户输入一个整数,然后输出该数的各个数字和数字的总和。例如3456的个别数字输出为3 4 5 6,8030的个别数字输出为80 3 0,2345526的个别数字输出为2 3 4 5 5 2 6,4000的个别数字输出为4 0 0 0,将-2345的各个数字输出为2 3 4 5。
我对 DO-While 循环中的数学如何工作感到困惑。需要一些帮助解释。
#include<iostream>
#include<cmath>
using namespace std;
//Main Function
int main()
{
//Declare Variables
int i, num, digit, sum = 0, tempNum, div;
//Input number
cout << "Please enter an integer number: ";
cin >> num;
//Convert negative values to absolute, as in |-5| = 5
tempNum = abs(num);
//Display indiviudal digits
cout << "The digits are: ";
i = -1;
while (tempNum !=0)
{
i++;
tempNum /= 10;
}
div = pow(10, i);
tempNum = abs(num);
do
{
digit = tempNum / div;
tempNum = tempNum % div;
sum = sum + digit;
div = div / 10;
cout << digit << " ";
} while (div > 0);
我会逐行进行:
循环的每次迭代都会有效地从循环中“弹出”第一个数字。假设数字是 1234(或 1000 + 200 + 30 + 4)。要开始循环,我们将有 div = 1000
(因为这是数字中的最高幂)和 tempNum = 1234
让我们看一下循环的单次迭代:
- 这个操作通常会产生
1.234
(1234 / 1000
),
但由于这是整数数学,它会四舍五入到 1
(截断 .234
部分)。这将存储数字中的第一个数字(在本例中为 digit = 1
):
digit = tempNum / div;
- 这是实际的“弹出”,它通过计算
1234
和 1000
的模数来实现。这与 tempNum - div * floor(tempNum / div)
或 1234 - 1000 * floor(1234 / 1000) = 1234 - 1000 * 1 = 234
具有相同的效果。完成后,我们剩下 tempNum = 234
:
tempNum = tempNum % div;
- 因为我们想要数字的总和,所以我们需要在这里跟踪它。回想一下
digit = 1
因为 1234
中的第一个数字是 1
:
sum = sum + digit;
- 由于我们“弹出”了第一个数字,因此循环的下一次迭代需要
div
向下移动到下一个 10 位。由于输入 div
是 1000
,此操作会将其抽取为 100
。
div = div / 10;
- 打印出这个数字
cout << digit << " ";
然后整个循环将重复,但不是从 div = 1000
和 tempNum = 1234
开始,而是 div = 100
和 tempNum = 234
。
希望这是有道理的,我可以尝试详细说明任何没有的要点!
编写一个程序,提示用户输入一个整数,然后输出该数的各个数字和数字的总和。例如3456的个别数字输出为3 4 5 6,8030的个别数字输出为80 3 0,2345526的个别数字输出为2 3 4 5 5 2 6,4000的个别数字输出为4 0 0 0,将-2345的各个数字输出为2 3 4 5。 我对 DO-While 循环中的数学如何工作感到困惑。需要一些帮助解释。
#include<iostream>
#include<cmath>
using namespace std;
//Main Function
int main()
{
//Declare Variables
int i, num, digit, sum = 0, tempNum, div;
//Input number
cout << "Please enter an integer number: ";
cin >> num;
//Convert negative values to absolute, as in |-5| = 5
tempNum = abs(num);
//Display indiviudal digits
cout << "The digits are: ";
i = -1;
while (tempNum !=0)
{
i++;
tempNum /= 10;
}
div = pow(10, i);
tempNum = abs(num);
do
{
digit = tempNum / div;
tempNum = tempNum % div;
sum = sum + digit;
div = div / 10;
cout << digit << " ";
} while (div > 0);
我会逐行进行:
循环的每次迭代都会有效地从循环中“弹出”第一个数字。假设数字是 1234(或 1000 + 200 + 30 + 4)。要开始循环,我们将有 div = 1000
(因为这是数字中的最高幂)和 tempNum = 1234
让我们看一下循环的单次迭代:
- 这个操作通常会产生
1.234
(1234 / 1000
), 但由于这是整数数学,它会四舍五入到1
(截断.234
部分)。这将存储数字中的第一个数字(在本例中为digit = 1
):
digit = tempNum / div;
- 这是实际的“弹出”,它通过计算
1234
和1000
的模数来实现。这与tempNum - div * floor(tempNum / div)
或1234 - 1000 * floor(1234 / 1000) = 1234 - 1000 * 1 = 234
具有相同的效果。完成后,我们剩下tempNum = 234
:
tempNum = tempNum % div;
- 因为我们想要数字的总和,所以我们需要在这里跟踪它。回想一下
digit = 1
因为1234
中的第一个数字是1
:
sum = sum + digit;
- 由于我们“弹出”了第一个数字,因此循环的下一次迭代需要
div
向下移动到下一个 10 位。由于输入div
是1000
,此操作会将其抽取为100
。
div = div / 10;
- 打印出这个数字
cout << digit << " ";
然后整个循环将重复,但不是从 div = 1000
和 tempNum = 1234
开始,而是 div = 100
和 tempNum = 234
。
希望这是有道理的,我可以尝试详细说明任何没有的要点!