C语言——高精度问题

1、高精度计算的本质:竖式计算;

2、适用解决超出long long int 范围的大整数计算

#include<stdio.h>
#include<string.h>
#define N 100
char str1[N+4]={0},str2[N+4]={0};
int arr1[N+4]={0},arr2[N+4]={0};
int ans[N+5]={0};

//将字符串转化成整型存储在新的int数组中,倒序存放
void transform(char *str,int *arr,int len){
	arr[0]=len;//用ans[0]记录数组长度
	for(int i=0;i<len;i++){
		arr[len-i]=(str[i]-'0');
	}
	return;
}

//实现竖式相加,并且实现进位
void add_big_num(int* arr1,int* arr2,int* ans){
	 ans[0]=arr1[0]>arr2[0]?arr1[0]:arr2[0];
	for(int i=1;i<=ans[0];i++){
		ans[i]=arr1[i]+arr2[i];
	}
	for(int i=1;i<=ans[0];i++){
		if(ans[i]<10) continue;
		ans[i+1]=ans[i+1]+(ans[i]/10);
		ans[i]=ans[i]%10;
		if(i==ans[0]) ans[0]++;
	}
	return;
}

int main(){
	scanf("%s %s",str1,str2);
	int len1=strlen(str1);
	int len2=strlen(str2);
	transform(str1,arr1,len1);
	transform(str2,arr2,len2);
	add_big_num(arr1,arr2,ans);
	
	//数值逆序输出
	for(int i=ans[0];i>=1;i--){
		printf("%d",ans[i]);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值