題目:
Q10591: Happy Number
讓我們定義正整數S0中每個數字的平方和為S1。以相同的方法我們定義S1中每個數字的平方和為S2,並依此類推。假如有某個Si = 1( i >= 1)則我們說S0是一個Happy number。如果某一個數不是Happy number,那他就是一個 Unhappy number。
例如: 7 是一個 Happy number,因為 7 -> 49 -> 97 ->130 -> 10 -> 1。
但是 4 是一個Unhappy number,因為 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4,永遠也無法產生 1。
Input
輸入的第一列有一個整數代表以下有多少組測試資料。
每組測試資料一列含有1個正整數N( N < 109)。
Output
對每組測試資料輸出一列,輸出這是第幾組測試資料,以及N為 Happy number 或 Unhappy number。輸出格式請參考Sample Output。
Sample Input Sample Output
3 Case #1: 7 is a Happy number.
7 Case #2: 4 is an Unhappy number.
4 Case #3: 13 is a Happy number.
13
我的code:
#include
#include
int main()
{
int total(int);
int line;
int string;
int num;
int sum;
int i;
scanf("%d", &line);
sum = 0;
for(i = 1; i <= line; i )
{
scanf("%d", &string);
if (string != 1)
{
do
{
sum = total(num);
num = sum;
}while (sum != 1 || sum != 4);
if (sum == 1)
printf("Case #%d: %d is a Happy number.\n", i, string);
else
printf("Case #%d: %d is an unhappy number.\n", i, string);
}
}
system("pause");
return 0;
}
int total(int num)
{
int st[9];
int total;
int n;
int i, p, k, count = 0;
n = num;
do
{
p = n % 10;
n = n / 10;
count ;
}while (p != 0);
k = count;
for (i = k - 1; i >= 0; i--)
{
p = num % 10;
st[i] = p;
num = num / 10;
}
total = 0;
for(i = 0; i <= count; i )
total = total st[i] * st[i];
return total;
}
2007-02-19 17:55:32 · 1 個解答 · 發問者 亭 2 in 電腦與網際網路 ➔ 程式設計
有的符號被貼上來就變的怪怪的˙˙
所有的"加"也都不見了>///<
看不懂麻煩提出
3QQ~~
2007-02-19 17:57:44 · update #1
int main()
{
int line;
int string;
int num;
int sum;
int i;
printf("How many Ns : ");
scanf("%d", &line);
sum = 0;
for(i = 1; i <= line; i )
{
printf("N(%d) : ", i);
scanf("%d", &string);
if (string != 1)
{
num = string;
do
{
sum = total(num);
num = sum;
}while (sum != 1 && sum != 4);
if (sum == 1)
printf("Case #%d: %d is a Happy number.\n", i, string);
else
printf("Case #%d: %d is an unhappy number.\n", i, string);
}
}
system("pause");
return 0;
}
int total(int num)
{
int st[9];
int total;
int n;
int i, p, k, count = 0;
n = num;
do
{
p = n % 10;
n = n / 10;
count ;
}while (n != 0);
k = count;
for (i = k - 1; i >= 0; i--)
{
p = num % 10;
st[i] = p;
num = num / 10;
}
total = 0;
for(i = 0; i < count; i )
total = total st[i] * st[i];
return total;
}
這樣就可以了
但是我有一個疑問 和一個 建議
疑問: unhappy number 一定會進到 4 嗎?
我沒有去證明
如果不一定成立
你的程式可能會進入無窮迴路
建議: 你的程式浪費太多沒必要的動作
可以精簡些
底下僅供參考
int main()
{
int line, i;
int num, sum;
printf("How many Ns : ");
scanf("%d", &line);
for(i = 1; i <= line; i )
{
printf("N(%d) : ", i);
scanf("%d", &num);
sum = num;
do
{
sum = total(sum);
} while (sum != 1 && sum != 4);
if (sum == 1)
printf("Case #%d: %d is a Happy number.\n", i, num);
else
printf("Case #%d: %d is an unhappy number.\n", i, num);
}
return 0;
}
int total(int n)
{
int i, p, k;
k = 0;
do
{
p = n % 10;
n = n / 10;
k = p*p;
}while (n != 0);
return k;
}
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-02-19 22:29:03 · answer #1 · answered by JJ 7 · 0⤊ 0⤋