初學新手 請各位高手們幫忙~
恩 以下是我的程式碼
//大數運算(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用太多了...
初學新手 請各位高手們幫忙~
恩 以下是我的程式碼
你的程式大至上有幾個問題
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 ,當初也卡了好久
初學新手 請各位高手們幫忙~
恩 以下是我的程式碼
你的程式大至上有幾個問題
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 ,當初也卡了好久