用c语言写基于静态数组的长整数的加减乘除运算的代码如何写
发布网友
发布时间:2022-05-23 16:25
我来回答
共1个回答
热心网友
时间:2023-10-29 02:43
加法:
voidAdd(char s1[],char s2[])//参数为两个字符串数组
{
int num1[M],num2[M];
int i,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\n");
}
减法等于加上负的数
乘法
voidMulti(char str1[],char str2[])
{
int len1,len2,i,j;
int a[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("\n");
}
除法最难 看这里吧http://wenku.baidu.com/link?url=rvqp3ApH2ujxsqTnoEnUmxc-hcvZz0Z8aV2NbvdxKOjBwRqx60Gju0ll56kccdo7u2_Kw8J1BGMlQpYmBhg4nT4lp7xt7mGtqaPV7x4CI-y(你们竟然会布置除法! 一般都是到乘法)