1. 程式人生 > >數學回味系列之19

數學回味系列之19

       發現一些比較有意思的數,大家一起來認識一下:

       分別是 阿姆斯特朗數、完全數、自守數、迴文數

阿姆斯特朗數:

       如果一個正整數等於其各個數字的立方和,則稱為 阿姆斯特朗數 (也稱自戀性數)。

       比如 153 = 1^3 + 5^3 + 3^3 (1+125+27) 就是一個阿姆斯特朗數。

       參考程式碼:

/* linolzhang 2006.10
   阿姆斯特朗數
*/
#include <stdio.h>
#include <math.h>

int main()
{
	printf("請輸入上限:");
	int N;
	scanf("%d",&N);

	for(int n=0; n<N; n++)
	{
		// 計算各位數的立方和Sum
		int Sum = 0;
		int k = n;
		while(k>0)
		{
			int bit = k % 10;
			Sum += bit*bit*bit;
			k /= 10;
		}
		if(Sum == n)  // 滿足 阿姆斯特朗數條件   
			printf("%d   ",Sum);
	}

	getchar();
	return 0; 
}

完全數:

       完全數(Perfect number),又稱完美數或完備數,是一些特殊的自然數。

       它所有的真因子(即除了自身以外的約數)的和(即因子函式),恰好等於它本身。

       定義:如果一個數恰好等於它的因子之和,則稱該數為“完全數”

       參考程式碼:

/* linolzhang 2006.10
   完全數
*/
#include <stdio.h>
#include <math.h>

int main()  
{
	printf("請輸入上限:");
	int N;
	scanf("%d",&N);

	for(int n=1; n<=N; n++)
	{
		int Sum = 0;
		for(int i=1; i<n; i++)
		{
			if(n%i == 0)
				Sum += i;
		}
		if(Sum == n)
			printf("%d   ",n);
	}

	getchar();
	return 0;
}

自守數:

       自守數是 平方後尾數等於該數自身的自然數

       參考程式碼:

/* linolzhang 2006.10
   自守數
*/
#include <stdio.h>
#include <math.h>

int main()  
{
	printf("請輸入上限:");
	int N;
	scanf("%d",&N);

	for(int n=1; n<=N; n++)
	{
		int i = 1;
		while(i <= n)
			i *= 10;

		if(n*n % i == n)
			printf("%d   ", n);
	}

	getchar();
	return 0;
}

迴文數:

       “迴文” 是指正讀反讀都能讀通的句子,中華文化的精髓之一哈。

       海上連雲港雲連上海

       霧鎖山頭山鎖霧

      人過大佛寺,寺佛大過人

      ……

      迴文數與之類似,任意自然數n,若將n的各位數字反向排列所得自然數n_r與n相等,則稱n為迴文數

      例如,1234554321 為迴文數。

      參考程式碼:

/* linolzhang 2006.10
   迴文數
*/
#include <stdio.h>
#include <math.h>

int main()  
{
	printf("請輸入上限:");
	int N;
	scanf("%d",&N);

	for(int n=1; n<=N; n++)
	{
		int n_r = 0; // 倒序結果
		int i = n;
		while(i != 0)
		{
			n_r = n_r*10 + i%10;
			i /= 10;
		}
		if(n_r==n) // 判斷倒序後的結果k 和原來輸入的數字n 是否相等,相等返回true
			printf("%d   \n", n);
	}

	getchar();
	return 0;
}