高精度计算运用数组进行大整数加减法
a) 涉及知识点:数组、流程控制等
b) 要求:用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[100],s2[100];//创建两个字符数组
int a[100]={0},b[100]={0},result1[101]={0},result2[101]={0};//这四个数组分别表示加数/被减数,加数/减数,加法结果,减法结果
int n1,n2,n,t;
scanf("%s%s",&s1,&s2);//输入两个数
n1=strlen(s1);
n2=strlen(s2);//分别确定两个数的位数
for(int i=n1-1, j=0; i>=0; i--, j++)
{
a[j] = s1[i] - '0';
}
for(int i=n2-1, j=0; i>=0; i--, j++)
{
b[j] =s2[i] - '0';
}
//将两个字符数组倒序放在两个整型数组中
n=(n1 > n2 ? n1 : n2);
//确定最高位数
for( int i=0 ; i<n ; i++ )
{
result1[i]+=a[i]+b[i];
if(result1[i]>9)
{
result1[i]-=10;//这是加法运算,如果两数相加超过10则进位
result1[i+1]++;
}
}
for(int i=n-1;i>=0;i--)
{
printf("%d",result1[i]);
}
printf("\n");//输出加法运算结果
if(n1 > n2)
t = 1;
else if(n1 == n2)
t = strcmp(s1, s2);
else
t = -1;
//上面这部分是比较两个数的大小
if(t==0)
printf("0");//如果两数相等则直接输出0;
if(t<0)
printf("-");//如果被减数小于减数,先输出负号,再进行倒置的减法运算
for(int i=0; i<n; i++)
{
if(t>=0)
{
if(a[i]>=b[i])
result2[i] = a[i] - b[i];
else
{
result2[i] = a[i] + 10 - b[i];
a[i+1]--;//这是借位
}
}//以上为常规情况 ,下面是结果为负的情况
else
{
if(a[i]<=b[i])
result2[i] = b[i] - a[i];
else
{
result2[i] = b[i] + 10 - a[i];
b[i+1]--;
}
}
}
for(int i=n-1,notzero=0; i>=0; i--)
{
if(result2[i]!=0)
notzero=1;//把结果前的0都处理掉,不输出,直到遇到第一个非零数再输出
if(notzero)
printf("%d",result2[i]);
}
//减法运算结果输出
return 0;
}