描述
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
-
输出
- 对于输入的每一行输出A99的值 样例输入
-
1 1 1
样例输出
-
69087442470169316923566147
题意就不说了,只管算就中了,这是我用java水我们oj上最后一道大数的题。
java代码:
import java.math.*;
import java.util.*;
public class Main{
public static void main(String[]args){
Scanner in=new Scanner(System.in);
BigInteger a=null;
BigInteger b=null;
BigInteger c=null;
BigInteger d=null;
while(in.hasNextBigInteger())
{ a=in.nextBigInteger();
b=in.nextBigInteger();
c=in.nextBigInteger();
for(int i=3;i<=99;i++)
{ d=a.add(b).add(c);
a=b;
b=c;
c=d;
}
System.out.println(d);
}
}
}
c++代码:
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
int a[50],b[50],c[50],d[50];
int main()
{ string s,s1,s2;
while(cin>>s>>s1>>s2)
{ memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
for(int i=0,j=s.size()-1;j>=0;++i,--j)
a[i]=s[j]-'0';
for(int i=0,j=s1.size()-1;j>=0;++i,--j)
b[i]=s1[j]-'0';
for(int i=0,j=s2.size()-1;j>=0;++i,--j)
c[i]=s2[j]-'0';
for(int i=0;i<=96;++i)
{ int k=0;
for(int j=0;j<50;++j)
{ d[j]=a[j]+b[j]+c[j]+k;
k=d[j]/10;
d[j]%=10;
}
for(int j=0;j<50;++j)
{ a[j]=b[j];
b[j]=c[j];
c[j]=d[j];
}
}
int flag=0,t;
for(int i=49;i>=0;--i)
if(d[i]) {flag=1;t=i;break;}
if(!flag) cout<<"0"<<endl;
else{
for(int i=t;i>=0;--i)
cout<<d[i];
cout<<endl;
}
}return 0;
}