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
69087442470169316923566147
有点意外的Accepted了,就只是简单的套用了一下大数加法模板就过了,--
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<cmath> #include<iomanip> #define maxn 10000 #define MAX 10000 using namespace std; //大数加法模板 string add(string s1, string s2) { if(s1.length() < s2.length()) { //确保s1的位数永远大于等于s2的位数 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)); //处理了s1,s2位数不同的情况和相同的情况 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() { string a, b, c, n1, n2; while(cin>>a>>b>>c) { for(int i=3; i<=99; ++i) { n1 = add(a, b); n2 = add(n1, c); a = b; b = c; c = n2; } cout<<n2<<endl; } }