Langage C "nombre de Narcisse" (y compris la compréhension)

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.

Je suppose que tu aimes

Origine blog.csdn.net/Claffic/article/details/128023453
conseillé
Classement