算法:高精度(加法)和一个题(洛谷p1601)用的是C语言

高精度运算(加法)

高精度运算是指超出了范围的运算,都可以用小学的竖式计算来做;

加法:例如

我们可以用字符数组来存数的每一个位数,用strlen()求出长度。再用整型数组存字符数组-‘0’;两个数组的每一个位数各自相加,让大于10的数进位,再模除于10;得出的结果的长度是我们要两个数长度最大的长度,最后有可能因为进位而长度加1,别忘了判断一下;

图片表示:

我们用一个题来举个例子:

题目:A+B problem 高精(洛谷 p1601)分别在两行内输入两个500位以内的十进制非负整数,求它们的和

代码:

#include<stdio.h>
#include<string.h>
#define max 500
int main(){
	char A[max],B[max];
	int a[max],b[max],c[max]={0},zlen,alen,blen,i,j;
	scanf("%s%s",A,B);
	alen=strlen(A);
	blen=strlen(B);
	zlen=alen;
	if(zlen<blen){
		zlen=blen;
	} 
	for(i=alen-1,j=1;i>=0;i--,j++){
		a[j]=A[i]-'0';
	}
	for(i=blen-1,j=1;i>=0;i--,j++){
		b[j]=B[i]-'0';
	}	
	for(i=1;i<=zlen;i++){
		c[i]+=a[i]+b[i];
		c[i+1]=c[i]/10;
		c[i]%=10;
	} 
	if(c[zlen+1]!=0){
		zlen++;
	}
	for(i=zlen;i>=1;i--){
		printf("%d",c[i]);
	} 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值