输入的整数位数不确定的情况下,怎样得到各个数位上的数?

遇到很多道题都需要这个得到各个数位上的数的过程,比如求数字黑洞。原题的一部分为:
任意输入一个3的倍数的正整数,先把这个数的每一个数位上的数字计算其立方后再相加,得到一个新数,然后把这个新数的每一个数位上的数字再计算其立方和,重复运算下去,结果都是153。

有用请采纳,点击右侧采纳即可:
下面是一个算法,用于获取输入数字的各个数位

#include <stdio.h>

int main()
{
    int n, sum = 0;
    printf("Enter an integer: ");
    scanf("%d", &n);
    while (n > 0)
    {
        sum += (n % 10) * (n % 10) * (n % 10);
        n /= 10;
    }
    printf("Result: %d\n", sum);
    return 0;
}


该算法通过以下步骤获取数字的各个数位:

1.使用 scanf 函数读入整数。
2.使用 while 循环,在整数大于 0 时不断进行以下操作:
a. 使用取模运算符(%)获取数字的个位数,即 n % 10。
b. 使用乘法运算符(*)计算个位数的立方,即 (n % 10) * (n % 10) * (n % 10)。
c. 使用加法运算符(+)将该数的立方加入结果和中,即 sum += (n % 10) * (n % 10) * (n % 10)。
d. 使用整除运算符(/)将整数除以 10,以获取下一个数位,即 n /= 10。
3.使用 printf 函数输出结果和。
上述算法可以帮助您获取数字的各个数位,从而实现计算数字黑洞的功能。

可以设置一个足够大的数组保存整数的每位数据,再将求出的每位数据保存到该数组中即可 。
或者
使用链表保存整数的每位数,每求出一位数就新建一个节点,节点保存的数据就是整数的每位数。
上述两种方法各有优劣,使用数组查找、添加更为简单;而链表中增加与删除更加简单。

供参考:

#include <stdio.h>
int Result(int n)
{
    int result = 0;
    while (n > 0) {
        result += (n % 10) * (n % 10) * (n % 10);
        n /= 10;
    }
    return result;
}
int main()
{
    int n, cnt = 0;
    do {
        scanf("%d", &n);
    } while (n % 3 != 0); //输入3的倍数
    while (n != 153) {
        n = Result(n);
        cnt++;
    }
    printf("n=%d,次数:%d", n, cnt);
    return 0;
}