输出正整数的每一位,为什么都是用%10,而用%100或者%1000就会取得不对的输出

#include <iostream>
using namespace std;
int main()
{
    int a, b, C, D, E, F, G;
    cout << "输入正整数:" << endl;
    cin >> a;
    if (a < 10)
    {
        b = 1; cout << a <<"是一个一位数:" << endl;
    }
    else if (a >= 10 && a < 100)
    {
        b = 2; cout << a<<"是一个二位数:" << endl;
    }
    else if (a >= 100 && a < 1000)
    {
        b = 3; cout << a<<"是一个三位数:" << endl;
    }
    else if (a >= 1000 && a < 10000)
    {
        b = 4; cout <<a<< "是一个四位数:" << endl;
    }
    else if (a >= 10000 && a < 100000)
    {
        b = 5; cout <<a<< "是一个五位数:" << endl;
    }
    else cout << "输入错误"<<endl;

    C = a % 10;cout << "个位数字是:" << C<<"\n"<<endl;
    D = ((a - a % 10) / 10) % 10;cout << "十位数字是:" << D<<"\n" << endl;
    E = ((a - a % 100) / 100) % 10;cout << "百位数字是:" << E<<"\n"<<endl;
    F = ((a - a % 1000) / 1000) % 10;cout << "千位数字是:" << F<<"\n"<<endl;
    G = ((a - a % 10000) / 10000) % 10;cout << "万位数字是:" << G<<"\n"<<endl;

    switch (b)
    {
    case 1:cout <<   "逆序输出是 : " << C ;    break;
    case 2:cout <<   "逆序输出是:" << C << D;    break;
    case 3:cout <<   "逆序输出是:" << C << D << E;    break;
    case 4:cout <<   "逆序输出是:" << C << D << E << F;    break;
    case 5:cout <<   "逆序输出是:" << C << D << E << F << G;    break;
    }
    system("pause");
    return 0;
}

img


不都用%10时,输出的结果就达不到想要的效果

img


都用%10时输出的效果是对的

%是取余符,就是数学里面的取余操作。

取一个数的第n位
公式应该是这样的
a % pow(10,n+1) / pow(10,n)
比如取个位就是a%10
取百位就是a%100/10
哪里有那么复杂

因为每一位数的范围都是0-9 十个数字
比如 19999 计算过程如下
C = 19999 % 10 = 9
D = ((19999 - 19999 % 10) / 10) % 10 = ((19999 - 9) / 10) % 10 = (19990/10) % 10 = 1999 % 10 = 9
E = ((19999 - 19999 % 100) / 100) % 10 = ((19999 - 99) / 100) % 10 = (19900/100) % 10 = 199 % 10 = 9
F = ((19999 - 19999 % 1000) / 1000) % 10 = ((19999 - 999) / 1000) % 10 = (19000/1000) % 10 = 19 % 10 = 9
G = ((19999 - 19999 % 10000) / 10000) % 10 = ((19999 - 9999) / 10000) % 10 = (10000/10000) % 10 = 1 % 10 = 1

因为D-G都除以了10-10000,除了之后,那一位就变成了个位,求个位是用的%10;
按你图中的数据,C是个位,求它是用的%10,就是4;
D是十位,输入数除以了10,整个数就变成了1426,再%10求个位,是6;
E是百位,输入数除以了100,整个数就变成了142,再%10求个位,是2;
F是千位,输入数除以了1000,整个数就变成了14,再%10求个位,是4;
G是万位,输入数除以了10000,整个数就变成了1,再%10求个位,是1;
另外,以求十位为例,不用((a - a % 10) / 10) % 10,可以换成a/10%10;