讀取使用者輸入的三位數,拆解百/十/個位,驗證立方和是否等於原數。
#include <stdio.h>
int main()
{
int num, a, b, c;
printf("請輸入一個三位整數: ");
scanf("%d", &num);
// 輸入合法性檢查
if (num < 100 || num > 999) {
printf("輸入錯誤:非三位數\n");
return 1;
}
a = num % 10; // 個位
b = num / 10 % 10; // 十位
c = num / 100; // 百位
if (num == a*a*a + b*b*b + c*c*c)
printf("%d 是水仙花數!\n", num);
else
printf("%d 不是水仙花數!\n", num);
return 0;
}
請輸入一個三位整數: 153
153 是水仙花數!
請輸入一個三位整數: 123
123 不是水仙花數!
// 取第 k 位 (1=個位, 2=十位, ...)
int digit = (num / (int)pow(10, k-1)) % 10;
或用迴圈通用拆解:
int temp = num, sum = 0;
while (temp > 0) {
int d = temp % 10;
sum += d*d*d;
temp /= 10;
}
pow(d,3) 產生浮點誤差,應用 d*d*d