洛谷 P1601 A+B Problem(高精)大数加法_2

P1601 A+B Problem(高精)

在这里插入图片描述

分析

简单易懂, 就是在靠高精度大数加法, 很久前(假期的时候)学习过这个知识点, 但很久没用有点忘记了(主要是忘记步骤), 而且也新学习了C++的string类, 故用新的方法重新做一次这道题

先放代码(注: 使用string实现高精度运算的思路来自洛谷题解https://www.luogu.com.cn/blog/user28954/solution-p1601,在此表示感谢!)


代码实现

#include<string>
#include<iostream>
#include<cstdio>
using namespace std;

string add(string str1, string str2)
{
	string str;
	int len1 = str1.length();
	int len2 = str2.length();
	
	if(len1<len2)
	{
		for(int i=1; i<=len2-len1; i++)
			str1 = "0" + str1;
	}
	else
	{
		for(int i=1; i<=len1-len2; i++)
			str2 = "0" + str2;
	}
	len1 = str1.length();
	int cf=0;
	int temp;
	for(int i=len1-1; i>=0; i--)
	{
		temp = str1[i]-'0'+str2[i]-'0'+cf;
		cf = temp/10;
		temp %= 10;
		str = char(temp+'0') + str;
	}
	if(cf!=0)	str = char(cf+'0') + str;
	return str;
}

int main(void)
{
	string str1, str2;
	cin >> str1 >> str2;
	cout << add(str1,str2) << endl;
	return 0;
}

收货与反思

  1. 最重要的还是先把大数加法的步骤屡清楚, 之后估计基本都是使用string进行大数模拟了, 随着学习的深入, 越来越觉得除了背下来的板子, 一个算法的思路步骤是很重要的, 有了思路代码便很容易实现.
    ①. 将要进行相加的两个数的位数补齐(用’0’补齐);
    ②. 从两个数的最低位数开始依次相加(注意减去’0’并加上上一位的进位)
    ③. 求当前是否有进位, 并将其插入str字符串的头位置
    ④. 循环结束后判断是否仍剩余进位, 有之则处理
    ⑤. 返回求得的str字符串
  2. 其次就是关于string的认识再一次加深了, string不只可以作为函数的参数, 甚至可以作为函数的返回值! 可以说相比与字符数组越来越觉得string类的方便之处了
  3. 最近在学习JAVA, 初识"类"的概念和使用, 感觉对学习C++的类也有很大的帮助. 之前说过向字符串string末尾添加字符使用.append或用"+“拼接, 而这道题又见识到”+"的强大之处, 即可以往字符串的头部添加新的字符(串), 受益匪浅.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值