Por favor vea el tema:
imprimir número de narciso
Contenido del tema:
Calcular y dar salida a todos los " números de narcisos " entre 0 y 100.000 .
pista:
"Número de Narciso" se refiere a un número de n dígitos, y la suma de las n-ésimas potencias de los dígitos es exactamente igual al número en sí, como: 153=1^3+5^3+3^3, entonces 153 es un "número de narcisos".
Prefacio:
Deberías haber notado que aquí se cita el número de narciso. De hecho, el número de narciso es una especie de número de autopoder , y el número de autopoder de tres dígitos se llama número de narciso. Por supuesto, hay otros números de poder propio, y los buenos nombres de los números de poder propio de uno a diez dígitos están aquí:
Exponentes de un dígito: números célibes
Dos poderes: no
Potencias de tres dígitos: números narcisos
Potencias de cuatro dígitos: número de rosa de cuatro hojas
Número de autoalimentación de cinco dígitos: número de estrella de cinco puntas
Número de autoexponenciación de seis dígitos: número sexagenario
Número de autoalimentación de siete dígitos: Número Big Dipper
Número de autoexponenciación de ocho dígitos: ocho inmortales
Número de autoalimentación de nueve dígitos: Nine-Nine Double Ninth Number
Número de autoalimentación de diez dígitos: número perfecto
Muy bien, sin más preámbulos, ¡comencemos a resolver el problema! @Claffic
Idea general:
Se requiere el número de autoexponenciación entre 0 y 100000, por supuesto, primero se genera un número entero i entre 0 y 100000. Luego juzgue de acuerdo con las características del número de autopoder.
todo lo que tienes que hacer es
1. Calcular que i es n dígitos;
2. Quite cada bit de i, encuentre su n-ésima potencia, súmelos y juzgue si son iguales a i.
Resolución de problemas:
1. Calcula que i tiene n dígitos
Toma como ejemplo el 153. Este es un número de tres dígitos.¿Cómo surgió el 3?
153/10 = 15 15/10 = 1 1/10 = 0; (la división entre enteros solo toma la parte entera del cociente)
hasta 0, realizado tres veces;
Escribe el código de esta manera:
int main()
{
int i = 0;
for (i = 0; i <= 1000000; i++)
{
//1.计算出 i 是 n 位数
int n = 1;
int tmp = i;//下面的循环会篡改i的值,此处把i放到tmp中进行循环
while (tmp > 9)//两位数进入循环,放过一位数(一位数都属自幂数)
{
tmp /= 10;
n++;//计数器
}
}
2. Quite cada bit de i, encuentre su n-ésima potencia, súmelas y juzgue si es igual a i
%10 elimina el dígito de las unidades, /10 elimina el dígito de las unidades y repite esto hasta 0;
Para encontrar la n-ésima potencia de cada dígito de i, puede usar la función pow();
tmp = i;//原理同上
int sum = 0;
while (tmp)
{
sum += pow(tmp % 10, n);//计算 i 每一位的 n 次方并求和
tmp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
La pantalla de resultados:
#include<stdio.h>
#include <math.h>//包含pow()函数
int main()
{
int i = 0;
for (i = 0; i <= 1000000; i++)
{
//1. 计算出i是几位数 - n
int n = 1;
int tmp = i;
while (tmp > 9)//153
{
tmp /= 10;
n++;//1 2 3
}
//2.剥离 i 的每一位,各求其 n 次方,相加,判断是否与 i 相等
tmp = i;
int sum = 0;
while (tmp)
{
sum += pow(tmp % 10, n);
tmp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
¿Lo has aprendido? Date prisa y escribe.