Merci de voir le sujet :
imprimer le numéro de la jonquille
Contenu du sujet :
Calculez et produisez tous les « nombres de jonquilles » entre 0 et 100 000 .
indice:
Le "nombre de Narcisse" fait référence à un nombre à n chiffres, et la somme des nièmes puissances des chiffres est exactement égale au nombre lui-même, tel que : 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3, alors 153 est un "Numéro de jonquilles".
Avant-propos :
Vous auriez dû remarquer que le numéro de narcisse est cité ici. En fait, le numéro de narcisse est une sorte de numéro d' auto-alimentation , et le numéro d'auto-alimentation à trois chiffres s'appelle le numéro de narcisse. Bien sûr, il existe d'autres nombres d'auto-alimentation, et les bons noms des nombres d'auto-alimentation de un à dix chiffres sont ici :
Exposants à un chiffre : nombres célibataires
Deux pouvoirs : non
Puissances de trois chiffres : nombres de jonquilles
Pouvoirs à quatre chiffres : numéro de rose à quatre feuilles
Numéro d'auto-alimentation à cinq chiffres: numéro étoile à cinq branches
Nombre d'auto-exponentation à six chiffres : nombre sexagénaire
Numéro d'auto-alimentation à sept chiffres : numéro de la Grande Ourse
Nombre d'auto-exponentation à huit chiffres : Huit Immortels
Numéro d'auto-alimentation à neuf chiffres: Nine-Nine Double Ninth Number
Numéro d'auto-alimentation à dix chiffres : nombre parfait
Très bien, sans plus tarder, commençons à résoudre le problème ! @Claffic
Idée générale:
Le nombre d'auto-exponentiation entre 0 et 100000 est requis, bien sûr, un entier i entre 0 et 100000 est généré en premier. Ensuite, jugez en fonction des caractéristiques du nombre d'auto-puissance.
Tout ce que tu dois faire est
1. Calculez que i est n chiffres ;
2. Dénudez chaque bit de i, trouvez sa nième puissance, additionnez-les et jugez s'ils sont égaux à i.
Résolution de problème:
1. Calculer que i est n chiffres
Prenons l'exemple de 153. Il s'agit d'un nombre à trois chiffres. Comment le 3 est-il arrivé ?
153/10 = 15 15/10 = 1 1/10 = 0 ; (la division entre entiers ne prend que la partie entière du quotient)
jusqu'à 0, exécuté trois fois;
Écrivez le code de cette façon :
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. Dénudez chaque bit de i, trouvez sa nième puissance, additionnez-les et jugez s'il est égal à i
%10 supprime le chiffre des unités, /10 supprime le chiffre des unités et le répète jusqu'à 0 ;
Pour trouver la nième puissance de chaque chiffre de i, vous pouvez utiliser la fonction pow() ;
tmp = i;//原理同上
int sum = 0;
while (tmp)
{
sum += pow(tmp % 10, n);//计算 i 每一位的 n 次方并求和
tmp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
L'affichage du résultat :
#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;
}
L'avez-vous appris ? Dépêchez-vous et écrivez.