C言語の日常練習 - べき乗数(水仙数を含む)を求める

目次

トピック:

導入:

ソースコード:

操作結果:

解決:


トピック:

0 ~ 100000 のすべての指数を見つけて出力します。

導入:

多くの友人は自己指数数の概念を聞いたことはないかもしれませんが、水仙数については聞いたことがあるはずです。実際、水仙数も自己指数数の 1 つです。

自己指数関数的数値はn 桁の数値を指し、各桁の n 乗の合計は数値自体と正確に等しくなります。たとえば、153=1^3+5^3+3^3 の場合、153 は数値そのものとなります。自己指数数。

自動電力分類:

1桁の自己電力番号:単一の番号、

2 桁のべき乗: なし、

3 桁の累乗: 水仙数、

4桁のべき乗数:四つ葉のバラ数、

5桁のべき乗数:五芒星数、

6 桁のべき乗数: 6 つの組み合わせた数、

7桁のべき乗数:北斗七星数、

8桁の自己べき乗数:8つの不滅の数、

9桁の自己べき乗数:9-9ダブルナインスフェスティバルナンバー、

10桁のべき乗数:完全数

ソースコード:

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	for (i = 0; i <= 100000; i++)
	{
		//1.计算i的位数
		int n = 1;
		int tmp = i;
		while (tmp /= 10)
		{
			n++;
		}
		//2.计算每一位的n次方之和
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum += pow(tmp % 10, n);
			tmp /= 10;
		}
		//3.判断
		if (sum == i)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

操作結果:

解決:

解決策は 3 つのステップに分かれています。

①: この数値の桁数を計算する: まず、0 から 100000 までの数値が必要なので、for ループを使用してそれを制御します。数値を取得したら、各数値の桁数を見つける必要があります。ここでは、次のように、ループを 10 で割る演算が使用されます。

 コードの操作は次のとおりです。

//1.计算i的位数
		int n = 1;
		int tmp = i;
		while (tmp /= 10)
		{
			n++;
		}

②: 各桁の n 乗の合計 (桁べき乗) を計算します。 ここでは、10 を巡回法 10 で割る演算を使用し、結果を毎回便利に加算する変数 sum を定義します。10 を法として最小値を取得します。ライブラリ関数 pow を使用して n 乗し、合計に加算し、最後に 10 で割った後の最下位ビットを削除します。10 で割った結果が 0 になるまで操作を繰り返します。

コードは以下のように表示されます:

//2.计算每一位的n次方之和
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum += pow(tmp % 10, n);
			tmp /= 10;
		}

③: 判定: sum が数値 i に等しいかどうかを判定し、等しい場合は i を出力します。

コードは以下のように表示されます:

//3.判断
		if (sum == i)
		{
			printf("%d ", i);
		}

プログラムの終了

おすすめ

転載: blog.csdn.net/hffh123/article/details/132218324