大数加法:
大数加法算是在大数运算里面算是最简单的了,他只需要把两个大数以字符串的形式存取数组,然后从最后一位开始往前加,如果当前数值加的结果大于9就进位,否则就把加的结果存入当前数组就可以(我用的是另一个数组存,也可以用第一个存数据的数组存储),另外注意的就是去除前导0问题,从最后一位检查数组是否当前值是否为0,是的话就往前减一,但是i的值要大于0(结果可能是0)
下面就是AC代码:
#include<stdio.h>
#include<string.h>
int a[2000],b[2000],c[2000];
char s[2000],p[2000];
int main()
{
int i,k,j,n,m;
while(scanf("%s %s", s,p))
{
memset(c,0,sizeof(c));
n=strlen(s);
m=strlen(p);
for(i=0; i<n; i++)
a[i]=s[n-i-1]-'0';
for(i=0; i<m; i++)
b[i]=p[m-i-1]-'0';
k=(m>n)?m:n;
for(i=0; i<=k; i++)
{
c[i]+=a[i]+b[i];
if(c[i]>9)
{
c[i+1]++;
c[i]%=10;
}
}
while(c[k]==0&&k>0) k--;
for(i=k; i>=0; i--)
printf("%d", c[i]);
printf("\n");
}
return 0;
}
大数减法:
大数减法是在大数加法的思想基础上进行运算的;还是用两个字符串存入两个大数,但是需要判断两个大数的大小,决定是前减后还是后减前;判断的方法是:
(此处用一个变量表示即如果前者大定义的变量值为0否则为1)位数大的肯定大,然后尾数相等的话可以用strcmp函数判断两个数的大小,如果两个数相等返回值为0,前者大为正数,后者大为负数:其他的看代码肯定也就能理解了;
AC代码:
#include<stdio.h>
#include<string.h>
int a[2000],b[2000],c[2000];
char s[2000],p[2000];
int main()
{
int n,m,i,j,k;
while(scanf("%s %s", s,p)!=EOF)
{
int flag=0;
memset(c,0,sizeof(c));
n=strlen(s);
m=strlen(p);
k=(n>m)?n:m;
for(i=0; i<n; i++)
a[i]=s[n-i-1]-'0';
for(i=0; i<m; i++)
b[i]=p[m-i-1]-'0';
if(n<m)
flag=1;
if(n==m)
{
if(strcmp(s,p)<0)
flag=1;
}
for(i=0; i<k; i++)
{
if(flag==0)
{
if(a[i]<b[i])
{
a[i+1]-=1;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
else if(flag==1)
{
if(a[i]>b[i])
{
b[i+1]-=1;
b[i]+=10;
}
c[i]=b[i]-a[i];
}
}
while(c[k-1]==0&&k!=1) k--;
if(flag==1)
printf("-");
for(i=k-1; i>=0; i--)
printf("%d", c[i]);
printf("\n");
}
return 0;
}
大数乘法:
大数乘法也是用到了大数加法只不过是在算的时候是用第二个的数的每一位去乘以第一个大数在运算的时候直接考虑进位,后面就再考虑一下进位就可以;看代码在理解一下应该可以明白;
代码:
#include<stdio.h>
#include<string.h>
int a[2000],b[2000],c[2000];
char s[2000],p[2000];
int main()
{
int i,j,k,t,slen,plen;
while(scanf("%s %s", s,p)!=EOF)
{
memset(c,0,sizeof(c));
slen=strlen(s);
plen=strlen(p);
for(i=0; i<slen; i++)
a[i]=s[slen-i-1]-'0';
for(i=0; i<plen; i++)
b[i]=p[plen-i-1]-'0';
for(i=0; i<slen; i++)
{
for(j=0; j<plen; j++)
{
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
}
k=slen+plen;
while(c[k]==0&&k>0) k--;
for(i=k; i>=0; i--)
printf("%d", c[i]);
printf("\n");
}
return 0;
}
大数除法:
明天再写!!!