Linguagem C "Número de Narciso" (incluindo compreensão)

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.

Acho que você gosta

Origin blog.csdn.net/Claffic/article/details/128023453
Recomendado
Clasificación