输入整数并显示单个数和数之和

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. 这个操作通常会产生 1.234 (1234 / 1000), 但由于这是整数数学,它会四舍五入到 1 (截断 .234 部分)。这将存储数字中的第一个数字(在本例中为 digit = 1):
digit = tempNum / div;
  1. 这是实际的“弹出”,它通过计算 12341000 的模数来实现。这与 tempNum - div * floor(tempNum / div)1234 - 1000 * floor(1234 / 1000) = 1234 - 1000 * 1 = 234 具有相同的效果。完成后,我们剩下 tempNum = 234:
tempNum = tempNum % div;
  1. 因为我们想要数字的总和,所以我们需要在这里跟踪它。回想一下 digit = 1 因为 1234 中的第一个数字是 1:
sum = sum + digit;
  1. 由于我们“弹出”了第一个数字,因此循环的下一次迭代需要 div 向下移动到下一个 10 位。由于输入 div1000,此操作会将其抽取为 100
div = div / 10;
  1. 打印出这个数字
cout << digit << " ";

然后整个循环将重复,但不是从 div = 1000tempNum = 1234 开始,而是 div = 100tempNum = 234

希望这是有道理的,我可以尝试详细说明任何没有的要点!