Lenguaje C "Número de Narciso" (incluida la comprensión)

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.

Supongo que te gusta

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