#7754: 請幫我看看關於大數加法的問題


stu961234 (Sun Prince)

學校 : 高雄市立高雄高級中學
編號 : 32713
來源 : [59.127.52.46]
最後登入時間 :
2017-05-30 23:24:24
a021. 大數運算 | From: [114.27.25.119] | 發表日期 : 2013-05-16 23:54

 初學新手  請各位高手們幫忙~

恩 以下是我的程式碼

//大數運算(plus)
#include<stdio.h>
#include<string.h>
#define len 50
void plus();
char a[len],b[len],c[len],tmp[len];
main(void)
{
 int i;
 scanf("%s",a);
 scanf("%s",b);
 for(i=0;i<strlen(a);i++)
        a[i]=a[i]-'0';
 for(i=strlen(a);i<len;i++)
        a[i]=0;
 for(i=0;i<strlen(b);i++)
        b[i]=b[i]-'0';
 for(i=strlen(b);i<len;i++)
        b[i]=0;
 for(i=0;i<len;i++)
     tmp[i]=a[i];         //這邊我不會用反轉,所以這樣做
 for(i=0;i<len;i++)
        a[i]=tmp[len-i-1];
 for(i=0;i<len;i++)
        tmp[i]=b[i];
 for(i=0;i<len;i++)
        b[i]=tmp[len-i-1];
   
}
void plus()
{
 int i,x,y,n;
 x=strlen(a);
 y=strlen(b);
 n=x>y?x:y;
 for(i=0;i<len;i++)
 {
  c[i]+=a[i]+b[i];
  if(c[i]>=10)  //進位的處裡
  {
   c[i+1]++;  //下一位至多+1
   c[i]%=10;
  }
 }
 i=n+2;
 while(c[i]==0)
 i--;
 for(;i>=0;i--)
 printf("%d",c[i]);
}

在電腦上跑都跑不出結果 always顯示prosess exits with return value 0....

我看了很久,還是找不出哪裡有錯誤,請各位高手們幫忙~                                P.S.前方的for用太多了...

 
#7755: Re:請幫我看看關於大數加法的問題


akira0331 (小迷糊)

學校 : 不指定學校
編號 : 26613
來源 : [203.70.194.240]
最後登入時間 :
2013-07-29 09:30:29
a021. 大數運算 | From: [203.70.194.240] | 發表日期 : 2013-05-17 10:19

 初學新手  請各位高手們幫忙~

恩 以下是我的程式碼

 


你的程式大至上有幾個問題

1. 總長度不超過 500 個位數, 你的array空間太小

2. 題目有多組輸入, 你的程式只能一次輸入而已,而且scanf("%s",b)會抓到運算子(+,-...), 沒有b值

    建議寫法 s[1000]; while(gets(s)!=0) 以此當輸入, 再將字串分為 a[], op[], b[]三份
3. 反轉的範例

    for(i=strlen(a)-1,j=0; i>=0; i--)

          tmp[j++]=a[i];

4. 進位的處裡, 加法進位是 1沒錯, 乘法進位就可能大於 1 

5. 輸出結果 c[] 所以的值是ASCII, 並不是整數, 所以要改成 printf("%d",c[i]+'0');

6 最後輸出完離for迴圈良後要加換行 printf("\n");

 希望以上建議對你有幫助,雖然此題困難度寫1,但我覺得這題困難度大於 3 ,當初也卡了好久

 
#7787: Re:請幫我看看關於大數加法的問題


stu961234 (Sun Prince)

學校 : 高雄市立高雄高級中學
編號 : 32713
來源 : [59.127.52.46]
最後登入時間 :
2017-05-30 23:24:24
a021. 大數運算 | From: [114.27.25.8] | 發表日期 : 2013-05-23 23:34

 初學新手  請各位高手們幫忙~

恩 以下是我的程式碼

 


你的程式大至上有幾個問題

1. 總長度不超過 500 個位數, 你的array空間太小

2. 題目有多組輸入, 你的程式只能一次輸入而已,而且scanf("%s",b)會抓到運算子(+,-...), 沒有b值

    建議寫法 s[1000]; while(gets(s)!=0) 以此當輸入, 再將字串分為 a[], op[], b[]三份
3. 反轉的範例

    for(i=strlen(a)-1,j=0; i>=0; i--)

          tmp[j++]=a[i];

4. 進位的處裡, 加法進位是 1沒錯, 乘法進位就可能大於 1 

5. 輸出結果 c[] 所以的值是ASCII, 並不是整數, 所以要改成 printf("%d",c[i]+'0');

6 最後輸出完離for迴圈良後要加換行 printf("\n");

 希望以上建議對你有幫助,雖然此題困難度寫1,但我覺得這題困難度大於 3 ,當初也卡了好久

恩 我懂了 真的很謝謝你:D (sorry晚回)

 
ZeroJudge Forum