[POJ3982]序列[字符串][大整数]

题目链接:[POJ3982]序列[字符串][大整数]

题意分析:就是字面那意思- -

解题思路:一开始觉得怎么会用大整数呢,肯定是找规律 - - 。然后找不到,就去鸟其它题了。最后知道真相的我眼泪掉下来。

个人感受:好久没写大整数了,以前写过一次,也就是一个数加一个数,输出结果,也就是HDU1002 XD.然后这次来个累加就跪得不行不行的。首先是string的运用,各种尝试,期间推到重写了三次,一次用char写,一次用string写,最后一次用string写。然后是进位的时候要-10,我写成了-9。

具体代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
using namespace std;

string add(string a, string b)
{
	string res;
	int carry = 0;  //进位 
	int len1 = a.length(), len2 = b.length(), mxl;  //mxl:最长长度 
	if (len1 > len2)
	{
		for (int i = len2; i < len1; ++i)
		{
			b += '0';  //补齐字符串,让这个为能够参与运算 
		}
		mxl = len1;
	}
	else
	{
		for (int i = len1; i < len2; ++i)
		{
			a += '0';  //补齐字符串,让这个为能够参与运算 
		}
		mxl = len2;
	}
	for (int i = 0; i < mxl; ++i)  //构造res字符串存储字符串和 
		res += '0';
	for (int i = 0; i < mxl; ++i)  //开始运算 
	{
		res[i] = a[i] + b[i] - '0' + carry; 
		if (res[i] > '9') //考虑是否要进位 
		{
			carry = 1;
			res[i] -= 10;
		}
		else carry = 0;
	}
	if (carry) 
	{
		res += '1';
	}
	return res;
}

int main()
{
	string a, b, c, d;
	while(cin >> a >> b >> c)
	{
		reverse(a.begin(),a.end()); //反转 
		reverse(b.begin(),b.end());
		reverse(c.begin(),c.end());
		for (int i = 3; i <= 99; ++i)
		{
			string t = add(a, b);
			d = add(t, c);
			a = b, b = c, c = d;
		}
		reverse(d.begin(),d.end());
		cout << d << endl;
	}
	return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值