判斷一個數是否為水仙花數
阿新 • • 發佈:2018-12-17
在判斷某一個數是水仙花數之前,我們先介紹一下什麼是水仙花數。
水仙花數(Narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant,PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個n位數(n>=3),它的每個位上的數字的n次冪之和等於這個數本身(例如:1^3+5^3+3^3=153)
根據這個概念來實現程式碼就比較容易了,有一點小小的困難就是實現一個數的n次冪,這裡我們介紹一個函式來實現此功能。
pow()函式,下面來舉一個簡單的例子,便於對次函式理解。
- #include<stdio.h>
- #include<math.h>
- void main(void)
- {
- int x = 2;
- int y = 3;
- int z = 0;
- z = pow(x, y);
- printf("z=%d", z);
- return 0;
- }
執行結果:z=8
現在我們可以判斷哪些數都是水仙花數了,程式碼如下。
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int i = 0;
- for (i = 100; i <= 10000; i++)//找10000以內的水仙花數
- {
- int tmp = i;//中間變數
- int
sum = 0;//求和 - int count = 0;//計數
- while (tmp)
- {
- count++;
- tmp /= 10;
- }
- tmp = i;
- while (tmp)
- {
- sum += pow(tmp % 10, count);//“%”用來取餘數
- tmp /= 10;//“/”用來取整,便於計算一個數有多少位
- }
- if (sum == i)
- {
- printf("%d\n", sum);
- }
- }
- return 0;
- }
執行結果:
到這裡求水仙花數我們就會了。基於這個問題,我們我們還有如下的一個拓展題。
問題:如何求Sn=a+aa+aaa+aaaa+aaaaa的前五項之和,其中a是一個數字,例如:Sn=2+22+222+2222+22222
分析:這個問題的規律性挺強,每一項都是前一項乘以10再加第一位,為了讓這個題可擴充套件,我們定義兩個變數a(某一個數),n(前n項),就可以解決了。
程式碼如下:
- #include<stdio.h>
- int main()
- {
- int a = 0;
- int n = 0;
- int tmp = 0;
- int i = 0;
- int sum = 0;
- scanf("%d%d", &a, &n);
- for (i = 0; i < n; i++)
- {
- tmp = tmp * 10 + a;
- sum += tmp;
- }
- printf("sum=%d\n", sum);
- return 0;
- }
執行結果: