遇到很多道题都需要这个得到各个数位上的数的过程,比如求数字黑洞。原题的一部分为:
任意输入一个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;
}