Por favor, veja o tópico:
imprimir número de narciso
Conteúdo do tópico:
Calcule e gere todos os " números de narcisos " entre 0 e 100.000 .
dica:
"Número de Narciso" refere-se a um número de n dígitos, e a soma das n-ésimas potências dos dígitos é exatamente igual ao próprio número, como: 153=1^3+5^3+3^3, então 153 é um "número de narcisos".
Prefácio:
Você deve ter notado que o número de narciso aqui é citado.Na verdade, o número de narciso é uma espécie de número de autopoder , e o número de autopoder de três dígitos é chamado de número de narciso. Claro, existem outros números de autopoder, e os bons nomes dos números de autopoder de um a dez dígitos estão aqui:
Expoentes de um dígito: números celibatários
Dois poderes: não
Potências de três dígitos: números narciso
Potências de quatro dígitos: número rosa de quatro folhas
Número de autopoder de cinco dígitos: número de estrela de cinco pontas
Número de autoexponenciação de seis dígitos: número sexagenário
Número de autopotência de sete dígitos: número da Ursa Maior
Número de auto-exponenciação de oito dígitos: Oito Imortais
Número de autopoder de nove dígitos: Nine-Nine Double Ninth Number
Número de autopoder de dez dígitos: número perfeito
Tudo bem, sem mais delongas, vamos começar a resolver o problema! @Claffic
Ideia geral:
O número de autoexponenciação entre 0 e 100.000 é necessário, é claro, um inteiro i entre 0 e 100.000 é gerado primeiro. Em seguida, julgue de acordo com as características do número de autopoder.
Tudo o que tem a fazer é
1. Calcule que i tem n dígitos;
2. Retire cada bit de i, encontre sua enésima potência, some-os e julgue se são iguais a i.
Solução de problemas:
1. Calcule que i tem n dígitos
Tome como exemplo 153. Este é um número de três dígitos. Como surgiu o 3?
153/10 = 15 15/10 = 1 1/10 = 0; (a divisão entre números inteiros leva apenas a parte inteira do quociente)
até 0, realizada três vezes;
Escreva o código desta forma:
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. Retire cada bit de i, encontre sua enésima potência, some-os e julgue se é igual a i
%10 remove o dígito das unidades, /10 remove o dígito das unidades e repete isso até 0;
Para encontrar a enésima potência de cada dígito de i, você pode usar a função pow();
tmp = i;//原理同上
int sum = 0;
while (tmp)
{
sum += pow(tmp % 10, n);//计算 i 每一位的 n 次方并求和
tmp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
A exibição do resultado:
#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;
}
Você aprendeu isso? Apresse-se e escreva.