加法:
现将两个数分别计算出长度,然后用将长度较短的数为界,写一个for循环,将两个数从末往前依次相加。这个循环结束后,将长度较大的数组未计入计算的数进行运算
#include<stdio.h>
#include<string.h>
int main()
{
char a[100],b[100];
while(~scanf("%s %s",a,b))//输入两个大整数
{
int c[120]={0};//将数组初始化为0
int l1,l2;
l1=strlen(a);
l2=strlen(b);
if(l1>l2)
{
int i,j,k;
k=l1;//两个数相加,那么相加的结果长度最多加1,即c数组长度最长为l1
j=l1-1;
for(i=l2-1;i>=0;i--)//从个位开始相加
{
int x,y,z;
x=a[j]-'0'+b[i]-'0';
y=x/10;//大于10的会进位
x=x%10;//当前位置该加上的数
c[k]=c[k]+x;
if(c[k]>=10)//一个位数如果大于了10,就进一位
{
c[k]-=10;
c[k-1]+=1;
}
c[k-1]=c[k-1]+y;
if(c[k-1]>=10)//若进位的值大于10,就再进一次
{
c[k-1]-=10;
c[k-2]+=1;
}
k--;
j--;
}
for(;j>=0;j--)//将a数组剩余的数字加起来
{
c[k]=a[j]-'0';
if(c[k]>=10)
{
c[k]-=10;
c[k-1]+=1;
}
k--;
}
if(c[0]!=0) printf("%d",c[0]);//检查和的长度是否加一
for(i=1;i<l1;i++) printf("%d",c[i]);
printf("%d\n",c[l1]);
}
else
{
int i,j,k;
k=l2;
j=l2-1;
for(i=l1-1;i>=0;i--)
{
int x,y,z;
x=a[i]-'0'+b[j]-'0';
y=x/10;
x=x%10;
c[k]=c[k]+x;
if(c[k]>=10)
{
c[k]-=10;
c[k-1]+=1;
}
c[k-1]=c[k-1]+y;
if(c[k-1]>=10)
{
c[k-1]-=10;
c[k-2]+=1;
}
k--;
j--;
}
for(;j>=0;j--)
{
c[k]=b[j]-'0';
if(c[k]>=10)
{
c[k]-=10;
c[k-1]+=1;
}
k--;
}
if(c[0]!=0) printf("%d",c[0]);
for(i=1;i<l2;i++) printf("%d",c[i]);
printf("%d\n",c[l2]);
}
}
return 0;
}
减法:
首先要比较这两个数的大小,然而因为是用一个数组存的,所以先比较其长度,若长度相同,则就用strcmp进行比较。若第一个数小于第二个数,结果就会有一个负号,但是通过数组计算是得不到负号的,所以我就通过比较大小判断是否需要添加负号
#include<stdio.h>
#include<string.h>
char a[100],b[100];
int c[120];
int l1,l2;
void jian(char p[],char q[],int l1,int l2)//计算差值
{
memset(c,0,sizeof(c));
int i,j,k;
j=l2-1;
k=0;
for(i=l1-1;i>=0;i--)
{
if(j<0) break;//当q数组计算到最高位时,退出循环
int x=0,y,z;
x=(p[i]-'0')-(q[j]-'0');
if(x<0)//当p数组里的元素小于q数组的元素时,向高位借一位
{
x+=10;
p[i-1]--;
}
c[k]+=x;//将差值赋给c数组
k++;
j--;
}
for(;i>=0;i--)
{
c[k]=p[i]-'0';//将未计算的p数组元素的值赋给c
k++;
}
while(c[k-1]==0) k--;//去掉前导0
for(i=k-1;i>=0;i--) printf("%d",c[i]);
printf("\n");
}
int main()
{
while(~scanf("%s %s",a,b))
{
l1=strlen(a);
l2=strlen(b);
if(l1>l2) jian(a,b,l1,l2);
else if(l1<l2)
{
printf("-");//先输出前面的负号
jian(b,a,l2,l1);//将a,b数组位置交换一下
}
else if(strcmp(a,b)>0) jian(a,b,l1,l2);//a,b数组长度相等时,a数组大于b数组的值
else if(strcmp(a,b)<0)//a,b数组长度相等时,a<b
{
printf("-");
jian(b,a,l2,l1);
}
else//a,b数组相等
{
printf("0\n");
}
}
return 0;
}