洛谷 P1601

A+B(高精)

//之前就听学习竞赛的同学说高精度算法很恶心, 今天一试, 果然如此
#include
using namespace std;
int a[10000], b[10000], res[10000];
int main()
{
	string s1, s2;  
	cin>>s1>>s2;  //将输入的两个大数以字符串的形式存储
	int l1 = s1.size(), l2 = s2.size();
	for(int i = 0;i<l1;i++)
		a[i] = s1[l1-1-i]-'0';  //将两个大数倒序存储进a,b两数组中, 倒序输入是为了防止进位时数组下标越界
	for(int i = 0;i<l2;i++)
		b[i] = s2[l2-1-i]-'0';
	int m = max(l1, l2);
	for(int i = 0;i<m;i++)
		res[i] = a[i]+b[i];  //对单独位进行加法运算
	for(int i=0;i<m;i++)
		if(res[i]>=10)
		{
			res[i]-=10;
			res[i+1]++;  //对计算结果进行进位处理
		}
	if(res[m]>0)
		m++;  //判断最高位是否有进位情况, 只需判断一次, 因为最多只进一位
	for(int i = m-1;i>=0;i--)
		cout<<res[i];
}

你可能感兴趣的:(洛谷自刷题答案,其他)