高精度计算运用数组进行大整数加减法

高精度计算运用数组进行大整数加减法

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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值