promotion image of download ymail app
Promoted
? asked in 電腦與網際網路程式設計 · 1 decade ago

這個程式碼哪裡有問題........

題目: 輸出所有輸入數值的累加總和

輸入格式: 輸入有數行, 每一行為最多50位數的十進位整數, 輸入的最後一行為 0

輸出格式: 輸出有一行, 這一行最多接受100位的十進位整數輸出

備註:輸入不會有負數

輸入範例:

99999999999999999999999999999999999999999999999999

2

50

0

輸出範例:

100000000000000000000000000000000000000000000000051

================我的程式碼如下==================================

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int main(void)

{

char num[51]="1";

char sum[101]="0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

char end[2]="0";

while((num[0]!=end[0])||(num[1]!=end[1]))

{

scanf("%s",num);

int carry=0,total,numlength,i,j=99;

numlength=strlen(num);

for(i=numlength-1;i<0;i--)

{

total=sum[j]+num[i];

carry=total/10;

sum[j]=total%10;

if(carry==1)

sum[j-1]+=1;

j--;

}

}

int i=0;

while(sum[i]!=0)

{

for(;i<100;i++)

{

printf("%c",sum[i]);

}

i++;

}

system("pause");

return 0;

}

===============================

麻煩各位程式高手指教

謝謝

2 Answers

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    寫的不錯喔.不過你用來加字串的迴圈有點不正確01 for(i=numlength-1;i<0;i--) 02 { 03     total=sum[j]+num[i]; 04     carry=total/10; 05     sum[j]=total%10; 06     if(carry==1) 07        sum[j-1]+=1; 08     j--; 09 }你的想法正確只不過忽略了一些小地方. 1. 此迴圈是以num[]為準從個位數往上加. (個十百千萬...) 個位數是在num[numlength-1]和sum[99]. 而num[]裡最大一位數是num[0]. 所以迴圈應從numlength-1走到0. 因此for(i=numlength-1;i<0;i--)中的I < 0不太對.2. 第3行, 在sum[]和num[]裡的是字元'0'-‘9’而不是數字0-9. 所以在運算之前你要先把字元'0'-‘9’轉成數字0-9. 字元'0'-‘9’轉成數字0-9很好轉. 例: ‘1’-‘0’ = 1. ‘9’ – ‘0’ = 9.3. 第5行在把結果存回sum[]裡時要把數字0-9轉成字元'0'-‘9’. 字元'0'-‘9’轉成數字0-9也很好轉. 例: 1 +‘0’ = ‘1’. 9 + ‘0’ = '9'4. 除了轉換和進位問題之外你在第3到5行的運算完全正確5. 如果在算num[]的最大一位數時有進位. 你的迴圈會加1進sum[]裡. 如果加1之後又進位怎麼辦? 例: num[] = “1”, sum[] = “99”. 1+9=10, total是10, carry是1所以sum[] = “:0”. 因'9'+1 = ‘:’. 因此你需要在while迴圈之後要再有一個迴圈, 檢查進位.懂不懂?不懂請再問--------------------------------------------------俺以上講的是由字元數字轉數字數字(十進位).若要轉'A'---> A(16進位)的話,字元數字'0'-'9'要減'0', 而大寫字母'A'-'F'要減'7',小寫字母'a'-'f'要減'W'或許我誤解你的意思?

    Source(s): Myself
    • Commenter avatarLogin to reply the answers
  • 1 decade ago

    看了龍大數字轉字元的寫去,今小弟覺得好神奇@@",請問龍大字元'A'有法子變成16進位的A嗎?@@?真不好意思,問了題外的話><

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.