習題4-6 水仙花數 (20分)
阿新 • • 發佈:2021-01-20
技術標籤:# 浙大版《C語言程式設計(第3版)》題目集c語言c++visual studio
水仙花數是指一個N位正整數(N≥3),它的每個位上的數字的N次冪之和等於它本身。例如:153=13 +53 +33 。 本題要求編寫程式,計算所有N位水仙花數。
輸入格式:
輸入在一行中給出一個正整數N(3≤N≤7)。
輸出格式:
按遞增順序輸出所有N位水仙花數,每個數字佔一行。
輸入樣例:
3
輸出樣例:
153
370
371
407
原始碼
#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)
//3:100~999
//4:1000~9999
//科學計數法: 3eN:錯誤 指數不能是變數,而且必須是整數,正負0均可
//如果是變數,可以用pow(,)函式啊
//本題如果用pow函式N=7時執行會超時,需要自己寫pow函式(目前還不知道為什麼)
int p(int x, int y)
{
int ret = 1;
for (int i = 0; i < y; i++) {
ret *= x;
}
return ret;
}
int main()
{
int N;
scanf("%d", &N);
int arr[7], sum = 0, flag = 0;
for (int i = p(10, N - 1); i <= p(10, N) - 1; i++)
{
flag = i;//宣告一個flag,每次把本次的i賦值給flag,防止i改變
for (int j = 0; j < N; j++)
{
arr[j] = flag % 10;
sum += p(arr[j], N);
flag = flag / 10;
}
if (i == sum) {
printf("%d\n", i);
}
sum = 0;//每個總的內層迴圈結束後,sum要初始化為0
}
//測試一下p函式:
//printf("%d\n", p(2, 3));//成功,然後就可以將pow全部換為p
getchar();
getchar();
return 0;
}
***謝謝!!!