あるシーケンス
説明
数列AはA n=An-1+An-2+An-3を満たす。n>=3 プログラムを作成して、A 0、A 1、A 2を指定して、A 99を計算します。
入力には複数行のデータが含まれています。1行あたりのデータは3つの整数A 0、A 1、A 2(0<=A 0、A 2、=100000 0000)のデータを含んでいます。EOFで終了します。
出力
入力する行ごとにA 99の値を出力します。
サンプル入力
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;
}