首页 > 编程语言 > 详细

c++ 大数模板 及例题

时间:2014-02-21 03:42:45      阅读:323      评论:0      收藏:0      [点我收藏+]

比较好的一个大数模板 贴在这里备用

string sum(string s1,string s2)
{
	if(s1.length()<s2.length())
	{
		string temp=s1;
		s1=s2;
		s2=temp;
	}
	int i,j;
	for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
	{
		s1[i]=char(s1[i]+(j>=0?s2[j]-‘0‘:0));   //注意细节
		if(s1[i]-‘0‘>=10)
		{
			s1[i]=char((s1[i]-‘0‘)%10+‘0‘);
			if(i) s1[i-1]++;
			else s1=‘1‘+s1;
		}
	}
	return s1;
}

顺便在来个例题,用大数模板求大斐波那契数 nyoj655光棍的yy

题目http://acm.nyist.net/JudgeOnline/problem.php?pid=655

直接套用模板没有任何技巧代码:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
string sum(string s1,string s2)
{
	if(s1.length()<s2.length())
	{
		string temp=s1;
		s1=s2;
		s2=temp;
	}
	int i,j;
	for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
	{
		s1[i]=char(s1[i]+(j>=0?s2[j]-‘0‘:0));   //注意细节
		if(s1[i]-‘0‘>=10)
		{
			s1[i]=char((s1[i]-‘0‘)%10+‘0‘);
			if(i) s1[i-1]++;
			else s1=‘1‘+s1;
		}
	}
	return s1;
}
int main()
{
    int n,T;
    scanf("%d",&T);
    while(T--)
    {
        string s;cin>>s;
        if(s.size()==1){
                printf("1\n");continue;
        }
        else if(s.size()==2)
        {
            printf("2\n");continue;
        }
        string ans,a="1",b="2";
        for(int i=3;i<=s.size();i++)
        {
            ans=sum(a,b);
            a=b;
            b=ans;
        }
        cout<<b<<endl;
    }
    return 0;
}


c++ 大数模板 及例题

原文:http://blog.csdn.net/y990041769/article/details/19545179

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!