一、問題描述算法
自冪數:一個n位數,每一個位上的數字的n次方之和等於它自己的數字;ide
例:153 = 3^3 + 5^3 + 1 ^3,就爲自冪數;spa
二、代碼實現blog
#include<stdio.h> const int table[][10] = { //table[3][6]表明:6的3次方,作一張表直接查詢,效率比較高; // 0 1 2 3 4 5 6 7 8 9 /*0次方*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*1次方*/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /*2次方*/ 0, 1, 2*2, 3*3, 4*4, 5*5, 6*6, 7*7, 8*8, 9*9, /*3次方*/ 0, 1, 2*2*2, 3*3*3, 4*4*4, 5*5*5, 6*6*6, 7*7*7, 8*8*8, 9*9*9, /*4次方*/ 0, 1, 2*2*2*2, 3*3*3*3, 4*4*4*4, 5*5*5*5, 6*6*6*6, 7*7*7*7, 8*8*8*8, 9*9*9*9, /*5次方*/ 0, 1, 2*2*2*2*2, 3*3*3*3*3, 4*4*4*4*4, 5*5*5*5*5, 6*6*6*6*6, 7*7*7*7*7, 8*8*8*8*8, 9*9*9*9*9, /*6次方*/ 0, 1, 2*2*2*2*2*2, 3*3*3*3*3*3, 4*4*4*4*4*4, 5*5*5*5*5*5, 6*6*6*6*6*6, 7*7*7*7*7*7, 8*8*8*8*8*8, 9*9*9*9*9*9, /*7次方*/ 0, 1, 2*2*2*2*2*2*2, 3*3*3*3*3*3*3, 4*4*4*4*4*4*4, 5*5*5*5*5*5*5, 6*6*6*6*6*6*6, 7*7*7*7*7*7*7, 8*8*8*8*8*8*8, 9*9*9*9*9*9*9, /*8次方*/ 0, 1, 2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9, /*9次方*/ 0, 1, 2*2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9*9, }; void selfNumber(int num); int selfLen(int num); int selfLen(int num){ if(num > 0 && num < 10){ return 1; }else if(num > 10 && num < 100){ return 2; }else if(num >100 && num < 1000){ return 3; }else if(num > 1000 && num < 10000){ return 4; }else if(num > 10000 && num < 100000){ return 5; }else if(num > 100000 && num < 1000000){ return 6; }else if(num > 1000000 && num < 10000000){ return 7; }else if(num > 10000000 && num < 100000000){ return 8; }else if(num > 100000000 && num < 1000000000){ return 9; } return -1; } void selfNumber(int num){ int n; int len = selfLen(num); int sum =0; for(n = num; n; n/=10){ sum += table[len][n%10]; //此處就是求每一位的n次冪的和,利用的就是在表中直接查詢的方法; } if(sum == num){ printf("%d是自冪數\n", num); } } void main(void){ int i; int count; printf("請輸出多少位之內的自冪數:"); scanf("%d", &count); for(i = 0; i < count; i++){ selfNumber(i); } }
三、結果截圖get
四、算法分析it
是查表法,根本不用計算,再加上if...else if判斷幾位數,效率很是的高效!!!io
五、算法題:輸入一個大於100000,小於21億的一個整數n,要求輸出7^n的個位上的數字?table
(1)、算法分析:class
(2)、代碼實現效率
#include<stdio.h> void main(void){ int value[] = {1, 7, 9, 3}; int n; printf("請輸入7的n次方,n = "); scanf("%d", &n); printf("7^n的個位數爲: %d\n", value[n%4]); }