高精加(洛谷P1601)

        先来解释下什么是高精:当几个数大到任何一个数据类型都无法存储时,就需要用到高精了~

 没什么好说的,上代码,解释尽在代码里~

高精加:

#include<bits/stdc++.h>
using namespace std;
//定义结构体 
struct node{
	string zi;
	//重载运载符+
	friend node operator+(node a, node b){
		//第一个数每个存入数组(因为数组可以开老多了~) 
		int yi[550],er[550],he[550];
		//初始化
		memset(yi,0,sizeof(yi));
		memset(er,0,sizeof(er));
		memset(he,0,sizeof(he)); 
        //赋值长度(存储两个数的长度) 
		int len1,len2;
		len1=a.zi.size();
		len2=b.zi.size();
		//反转 (因为我们从1开始遍历,而数是正着的,(模拟竖式从后往前加)) 
		reverse(a.zi.begin(),a.zi.end());
		reverse(b.zi.begin(),b.zi.end());
		//将用字符串存储的数传入数组 
		for(int i=0;i<len1;i++) yi[i]=a.zi[i]-48;//强转int类型 
		for(int i=0;i<len2;i++) er[i]=b.zi[i]-48;//强转int类型,too 
		//最大的长度
        int len=max(len1,len2);
		//统计数字和
        for(int i=0;i<len;i++){
        	//统计当前数字每一位的和 
			he[i]+=yi[i]+er[i];
			//如果要进位 
			if(he[i]>=10){
				//进一位呗 
				he[i+1]+=1;
				//当前数位 
				he[i]%=10;
			}
		}
        //如果多出一位
		if(he[len]!=0){
			//长度增加 
			len++;
		}
		node ans;
		//定义空串 
        ans.zi="";
        //存入最后的值 
		for(int i=len-1;i>=0;i--){
			ans.zi+=char(he[i]+48); 
		}
        //返回~		
		return ans; 
	} 
};
//快乐的定义 
node a,b; 
int main(){
	//输入 
	cin>>a.zi>>b.zi;
	//输出~ 
	cout<<(a+b).zi;
	return 0;
}

有错误或提问欢迎在评论区指出~


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值