水仙花數
雖然做過水仙花但做hdu裡的時還是送出了好幾次,确實有一些細節性的地方容易出錯,記錄一下。希望大家可以互相交流。
題目
Problem Description
春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的:
“水仙花數”是指一個三位數,它的各位數字的立方和等于其本身,比如:153=13+53+3^3。
現在要求輸出所有在m和n範圍内的水仙花數。
Input
輸入資料有多組,每組占一行,包括兩個整數m和n(100<=m<=n<=999)。
Output
對于每個測試執行個體,要求輸出所有在給定範圍内的水仙花數,就是說,輸出的水仙花數必須大于等于m,并且小于等于n,如果有多個,則要求從小到大排列在一行内輸出,之間用一個空格隔開;
如果給定的範圍内不存在水仙花數,則輸出no;
每個測試執行個體的輸出占一行。
Sample Input
100 120
300 380
Sample Output
no
370 371
代碼如下():
#include<stdio.h>
#include<math.h>
int main()
{
int n,m,flag;
while(~scanf("%d%d",&m,&n))
{
flag=0;//flag用于判斷範圍内有無水仙花的
//每一次flag都要重新指派
while(m<=n)
{
int hun=m/100;
int ten=m/10%10;
int one=m%10;
if(m==pow(hun,3)+pow(ten,3)+pow(one,3))
{
//這裡注意最後一個資料後是沒有空格的
if(flag==0)
{printf("%d",m);flag=1;}
else
printf(" %d",m);
}
m++;
}
if(!flag)
printf("no\n");
else
printf("\n");//有水仙花數最後追加一個回車
}
return 0;
}
總結
易錯點:
1.
int flag=0;
這裡給flag初始化之後(也可以先不初始化),在循環内必須給flag重新指派
flag=0
。否則這次flag的值會帶入下一次樣例導緻出錯。
2.找到水仙花的最後一項後面是沒有空格的。
解決空格方法:
A.
printf("%d ");空格後置
将得到的水仙花放入一個數組中,對數組進行在最後一項輸出中不要加回車。
弊端:另外開辟數組空間,且大小未知。
B
采用printf(" %d");空格前置
這樣隻需要在第一次時進行判斷,即flag=0時,比較适合。
有幫助的話記得給個👍