c++ 大數模板 及例題
阿新 • • 發佈:2019-01-02
比較好的一個大數模板 貼在這裡備用
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
直接套用模板沒有任何技巧程式碼:
#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; }