⑴ 用c語言寫基於靜態數組的長整數的加減乘除運算的代碼如何寫
加法:
voidAdd(chars1[],chars2[])//參數為兩個字元串數組
{
intnum1[M],num2[M];
inti,j;
len1=strlen(s1);
len2=strlen(s2);
for(i=len1-1,j=0;i>=0;i--)//num1[0]保存的是低位
num1[j++]=s1[i]-'0';
for(i=len2-1,j=0;i>=0;i--)
num2[j++]=s2[i]-'0';
for(i=0;i<M;i++)
{
num1[i]+=num2[i];
if(num1[i]>9)
{
num1[i]-=10;
num1[i+1]++;
}
}
for(i=M-1;(i>=0)&&(num1[i]==0);i--);//找到第一個不是0的數的位置
if(i>=0)//從高位到低位輸出每個數
for(;i>=0;i--)
printf("%d",num1[i]);
else
printf("0 ");
}
減法等於加上負的數
乘法
voidMulti(charstr1[],charstr2[])
{
intlen1,len2,i,j;
inta[MAX+10],b[MAX+10],c[MAX*2+10];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
len1=strlen(str1);
for(j=0,i=len1-1;i>=0;i--)//把數字倒過來
a[j++]=str1[i]-'0';
len2=strlen(str2);
for(j=0,i=len2-1;i>=0;i--)//倒轉第二個整數
b[j++]=str2[i]-'0';
for(i=0;i<len2;i++)//用第二個數乘以第一個數,每次一位
for(j=0;j<len1;j++)
c[i+j]+=b[i]*a[j];//先乘起來,後面統一進位
for(i=0;i<MAX*2;i++)//循環統一處理進位問題
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
for(i=MAX*2;(c[i]==0)&&(i>=0);i--);//跳過高位的0
if(i>=0)
for(;i>=0;i--)
printf("%d",c[i]);
else
printf("0");
pritnf(" ");
}
除法最難看這里吧http://wenku..com/link?url=rvqp3ApH2ujxsqTnoEnUmxc-_-y(你們竟然會布置除法!一般都是到乘法)