×

高精度

Very2 Very2 发表于2026-04-25 10:18:05 浏览546 评论0

抢沙发发表评论

image.png

#include<bits/stdc++.h>
using namespace std;
string s1,s2;		//字符串表示高精度数 
int a[210],b[210],c[210];	//转存至整数数组 
int main(){
	cin>>s1>>s2;		//输入加数1和加数2 
	int len1,len2;		//字符串长度 
	len1=s1.size();
	len2=s2.size();
	//逆序存储加数1至整数数组a
	for(int i=0;i<=len1-1;i++){
		a[i]=s1[len1-i-1]-'0';}
	//逆序存储加数2至整数数组b
	for(int i=0;i<=len2-1;i++){
		b[i]=s2[len2-i-1]-'0';}
	//取两个加数位数最大值len,是否满10进位用x表示
	int len,x=0; 
	len=max(len1,len2);
	//加数1和加数2,循环按位累加后转存至数组c,满10则进位1
	for(int i=0;i<=len-1;i++){ 
		c[i]=a[i]+b[i]+x;
		if(c[i]>=10){	//满10则进位1
			c[i]-=10;	//当前位减10 
			x=1;		//进位加1 
		}
		else x=0;}
	//如果循环结束后进位1(即最高位满10进1),则直接先输出1
	if(x==1){ 
		cout<<1;
		for(int i=len-1;i>=0;i--){	//逆序输出保存和的数组c 
			cout<<c[i]; }
	}
	else{	//如果最高位不满10进1 
	//先剔除数组c尾部连续的0(即作为和的结果头部连续的0)
		while(c[len-1]==0&&len-1>0){ 
			len--;}
		for(int i=len-1;i>=0;i--){	//逆序输出保存和的数组c 
			cout<<c[i]; }
	}
	return 0;
 }


image.png

#include<bits/stdc++.h>
using namespace std;
string s1,s2;		//字符串表示高精度数 
int a[10090],b[10090],c[10090];	//转存至整数数组 
int main(){
	cin>>s1>>s2;		//输入被减数s1和减数s2 
	int len1,len2;		//字符串长度 
	len1=s1.size();
	len2=s2.size();
	if(len1<len2||(s1<s2&&len1==len2)){	//如果被减数<减数,输出负号,交换被减数和减数 
		cout<<"-";
		swap(s1,s2);
		len1=s1.size();
		len2=s2.size();
	}
	for(int i=0;i<=len1-1;i++){
		a[i]=s1[len1-i-1]-'0';		//逆序存储被减数s1至整数数组a 
	}
	for(int i=0;i<=len2-1;i++){
		b[i]=s2[len2-i-1]-'0';		//逆序存储减数s2至整数数组b
	}
	int len;					//取被减数和减数的位数最大值len 
	len=max(len1,len2);
	for(int i=0;i<=len-1;i++){		//被减数和减数,循环按位递减后转存至数组c 
		c[i]=a[i]-b[i];
		if(c[i]<0){				//若为负则借位 
			c[i]+=10;			//当前位加10 
			a[i+1]-=1;			//上一位减1 
		}
	}
	while(c[len-1]==0&&len-1>0){		//先剔除数组c尾部连续的0(即作为差的结果头部连续的0) 
			len--;
		}
		for(int i=len-1;i>=0;i--){	//逆序输出保存差的数组c 
			cout<<c[i]; 
		}
	return 0;
 }


二者

访客