大数加法,从低位开始,依次运算,注意进位即可。
大数减法,从低位开始,按位依次做减法,注意借位即可。
大数乘法(此处为高精度*高精度),用到移位和加法(都是对数组进行操作)。以123*456为例说明算法运行过程。先令结果ans数组置零,第一步,计算6*123,结果保存在数组temp1中,再向左移动0位,低位补零。再将ans与temp1相加,相加的结果保存在ans中。第二步,用5*123,结果保存在temp1中,再向左移动1位,低位补零。再将ans与temp1相加,相加的结果保存在ans中.第三步,用4*123,结果保存在temp1中,再向左移动2位,低位补零。再将ans与temp1相加,相加的结果保存在ans中。
大数除法,就是不断做减法的过程,以7654/23为例,说明算法运行过程,设”7654”的长度为len1=4,”23”为len2=2,nTimes=len1-len2=2;第一步,将”23”左移nTimes位,低位补零,即变为“2300”.在用“7654”-“2300”,够减,则用结果“5354”替代“7654”,以便进行下一次运算。并且ans[nTimes]++。然后,用“5354-2300”,够减,则用结果“3054”替代“5354”,以便进行下一次运算。并且ans[nTimes]++.再用“3054”-“2300”,,够减,则用结果“754”替代“3054”,以便进行下一次运算。并且ans[nTimes]++.再用“754”-“2300”,不够减,则将“23”左移nTimes-1位,低位补零,变为“230”.用“754”-“230”,够减,则用结果“524”替代“754”,以便进行下一次运算。并且ans[nTimes-1]++.继续用“524”-“230”,,够减,则用结果“294”替代“524”,以便进行下一次运算。并且ans[nTimes-1]++,继用“294”-“230”,,够减,则用结果“64”替代“294”,以便进行下一次运算。并且ans[nTimes-1]++,继续用“64”-“230”,不够减,则将“23”左移nTimes-2位,低位补零,变为“23”.在用“64”-“23”,够减,则用结果“41”替代“64”,以便进行下一次运算。并且ans[nTimes-2]++。在用“41”-“23”,够减,则用结果“18”替代“41”,以便进行下一次运算。并且ans[nTimes-2]++。在用“18”-“23”,不够减。算法结束。逆序输出ans的值即为结果.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int compare(int a[],int b[],int len1,int len2);
int add(int a[],int b[],int len1,int len2);
int sub(int a[],int b[],int len1,int len2);
int mul(int a[],int b[],int len1,int len2,int ans[]);
int division(int a[],int b[],int len1,int len2,int ans[]);
int main()
{
char ch;
char input[25];
int i,j,k,len1,len2,num;
int a[12],b[12],ans[25];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(ans,0,sizeof(ans));
for(i=0;scanf("%c",&input[i])==1&&input[i]!='\n';i++);
ch=input[0];
for(j=i-1,k=0;input[j]!=' ';j--,k++)
{
b[k]=input[j]-'0';
}
len2=k;
for(i=j-1,k=0;input[i]!=' ';i--,k++)
{
a[k]=input[i]-'0';
}
len1=k;
if(ch=='+')
{
num=add(a,b,len1,len2);
if(num==-1)
{
printf("0\n");
return 0;
}
else
{
for(i=num;i>=0;i--)
printf("%d",a[i]);
}
}
else if(ch=='-')
{
if(compare(a,b,len1,len2)==0)
{
printf("0\n");
return 0;
}
else if(compare(a,b,len1,len2)>0)
{
num=sub(a,b,len1,len2);
if(num==-1)
{
printf("0\n");
return 0;
}
else
{
for(i=num;i>=0;i--)
printf("%d",a[i]);
}
}
else if(compare(a,b,len1,len2)<0)
{
num=sub(b,a,len2,len1);
if(num==-1)
{
printf("0\n