Q10035: Primary Arithmetic
在小學時我們都做過加法的運算,就是把2個整數靠右對齊然後,由右至左一位一位相加。如果相加的結果大於等於10就有進位(carry)的情況出現。你的任務就是要判斷2個整數相加時產生了幾次進位的情況。這將幫助小學老師分析加法題目的難度。
Input
每一列測試資料有2個正整數,長度均小於10位。最後一列有2個0代表輸入結束。
Output
每列測試資料輸出該2數相加時產生多少次進位,請參考Sample Output。注意進位超過1次時operation有加s
Sample Input
123 456
555 555
123 594
0 0
Sample Output
No carry operation.
3 carry operations.
1 carry operation.
別人寫的程式˙˙
不懂啊Orz
麻煩幫我加註解(每一行在宣告什麼and算什麼)~~~
要超詳細版的~~~3Q
程式如下 :
#include
#include
main()
{
#define max 5000
int num[2];
int tmp, fator[2], aux[2][max];
int i, j, k;
int count, d;
while (1)
{
scanf("%d %d", &num[0], &num[1]);
if (num[0] == 0 && num[1] == 0)
break;
for (k = 0; k <= 1; k )
{
d = 0;
fator[k] = 1;
tmp = num[k];
while ( tmp != 0 )
{
fator[k] = fator[k] * 10;
tmp = tmp / 10;
d ;
}
fator[k] = fator[k] / 10;
for ( j = d ; j > 0 ; j-- )
{
aux[k][j] = num[k] / fator[k];num[k] = num[k] - aux[k][j] * fator[k];
fator[k] = fator[k] / 10;
}
}
tmp = 0;
count = 0;
for ( j = 0 ; j <10 ; j )
{
tmp = tmp aux[0][j] aux[1][j];
if ( tmp >= 10 )
{
count ;
tmp = 1;
}
else
{
tmp = 0;
}
aux[0][j] = 0;
aux[1][j] = 0;
}
if ( count == 0 )
printf("No carry operation.\n");
else if ( count == 1 )
printf("1 carry operation.\n");
else
printf("%d carry operations.\n", count);
}
system("pause");
return 0;
}
2007-02-18 11:03:29 · 1 個解答 · 發問者 亭 2 in 電腦與網際網路 ➔ 程式設計
有怪東西˙˙
"是 "
while ( tmp != 0 )中的d後的 不見了
<是 <
>是 >
tmp = tmp aux[0][j] aux[1][j];是tmp = tmp aux[0][j] aux[1][j];
count ; tmp = 1;是count ; tmp = 1;
知識不知為啥就變這樣了~~~
2007-02-18 11:11:03 · update #1
還是不行~~發揮想像力吧(遠目)
2007-02-18 11:12:07 · update #2
為什麼 #define max 5000
的5000改為別的數字
第一次的運算都會發生錯誤
2007-02-22 16:21:48 · update #3
#define max 5000 /* 宣告最大位數 (其實 大於 10 就可以了)*/
main()
{
int num[2];
int tmp, fator[2], aux[2][max];
int i, j, k;
int count, d;
while (1)
{
scanf("%d %d", &num[0], &num[1]); /* 輸入該兩個整數 */
if (num[0] == 0 && num[1] == 0) /* 兩個整數都為0 時停止*/
break;
for (k = 0; k <= 1; k++) /* 做兩次因為有兩個整數 */
{
d = 0;
fator[k] = 1;
tmp = num[k];
/* 底下在分離該整數的各個數字 */
while ( tmp != 0 ) /* 找出該整數是幾位數 */
{
fator[k] = fator[k] * 10;
tmp = tmp / 10;
d++;
}
fator[k] = fator[k] / 10;
for ( j = d ; j > 0 ; j-- ) /* 分離各個數字 並存在 aux[k][j] 裡*/
{
aux[k][j] = num[k] / fator[k];num[k] = num[k] - aux[k][j] * fator[k];
fator[k] = fator[k] / 10;
}
}
tmp = 0;
count = 0;
for ( j = 0 ; j <10 ; j++) /* 開始計算 */
{
tmp = tmp+ aux[0][j]+ aux[1][j];
if ( tmp >= 10 ) /*有進位 */
{
count++;
tmp = 1;
}
else /*沒有進位 */
{
tmp = 0;
}
aux[0][j] = 0; /* 這兩行沒有必要 */
aux[1][j] = 0;
}
/*印出結果 */
if ( count == 0 )
printf("No carry operation.\n");
else if ( count == 1 )
printf("1 carry operation.\n");
else
printf("%d carry operations.\n", count);
}
system("pause");
return 0;
}
如果有問題, 請來函討論. 不然, 我可能會錯失你再補充的疑點.
2007-02-20 09:01:54 · answer #1 · answered by JJ 7 · 0⤊ 0⤋