⑴ 用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(你们竟然会布置除法!一般都是到乘法)