题目大意:找出满足某条件数列中规定Address的Data~
Description
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
编写程序,给定A0, A1 和 A2, 计算A99
Input
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767)
数据以EOF结束
Output
对于输入的每一行输出A99的值
Sample Input
1 1 1
Sample Output
/*方法一*/
import java.util.Scanner;
public class Main {
static String doAdd(String a,String b){
String str="";
int lenA=a.length();
int lenB=b.length();
int maxLen=(lenA>lenB)?lenA:lenB;
int minLen=(lenA<lenB)?lenA:lenB;
String strTmp="";
for(int i=maxLen-minLen;i>0;i--){
strTmp+="0";
}
//把长度调整到相同
if(maxLen==lenA){
b=strTmp+b;
}else
a=strTmp+a;
int JW=0;//进位
for(int i=maxLen-1;i>=0;i--){
int tempA=Integer.parseInt(String.valueOf(a.charAt(i)));
int tempB=Integer.parseInt(String.valueOf(b.charAt(i)));
int temp;
if(tempA+tempB+JW>=10&&i!=0){
temp=tempA+tempB+JW-10;
JW=1;
}else{
temp=tempA+tempB+JW;
JW=0;
}
str=String.valueOf(temp)+str;
}
return str;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String[] a=new String[100];
while(sc.hasNext()){
a[0]=Integer.toString(sc.nextInt());
a[1]=Integer.toString(sc.nextInt());
a[2]=Integer.toString(sc.nextInt());
for(int i=3;i<100;i++){
String temp=doAdd(a[i-1],a[i-2]);
a[i]=doAdd(temp,a[i-3]);
}
System.out.println(a[99]);
}
}
}
/*方法二*/
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static BigInteger calc(BigInteger a,BigInteger b,BigInteger c){
BigInteger now=c;//现在的
BigInteger last=b;//过去的
BigInteger llast=a;//过过去的
BigInteger answer;
for(int i=0;i<97;i++){
//计算前三个和
answer=now.add(last);
answer=answer.add(llast);
//新值覆盖旧值
llast=last;
last=now;
now=answer;
}
return now;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int a0=sc.nextInt();
BigInteger A0=BigInteger.valueOf(a0);
int a1=sc.nextInt();
BigInteger A1=BigInteger.valueOf(a1);
int a2=sc.nextInt();
BigInteger A2=BigInteger.valueOf(a2);
System.out.println(calc(A0,A1,A2));
}
}
}