poj3982~1503大数问题
poj3982
数列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
#include <iostream>
#include <string>
using namespace std;
#define SIZE 105
string s1[SIZE];
string s;
int sum[SIZE]={0};
string add(string s1,string s2,string s3)
{
int i,j;
for(i=0;i<SIZE;i++)
sum[i]=0;//清零
for(j=SIZE-1,i=s1.size()-1;i>=0;--i)//加s1
sum[j--]+=(s1[i]-'0');
for(j=SIZE-1,i=s2.size()-1;i>=0;--i)//加s2
sum[j--]+=(s2[i]-'0');
for(j=SIZE-1,i=s3.size()-1;i>=0;--i)//加s3
sum[j--]+=(s3[i]-'0');
j=0;//处理时去除前面的零
while(!sum[j])
++j;
for(i=SIZE-1;i>=j;i--)//处理进位
{
sum[i-1]+=sum[i]/10;
sum[i]=sum[i]%10;
}
i=0;//输出前去除前面的零
while(!sum[i])
++i;
i++;
int k=i;
string t(SIZE-i+1,'0');
for(;i<=SIZE;i++)
t[i-k]=sum[i-1]+'0';
return t;
}
int main()
{
int i;
while(cin>>s1[0]&&s1[0].compare("EOF"))//while(scanf("%s%s%s",s1[0],s1[1],s1[2])!=EOF)
{ cin>>s1[1]>>s1[2];
for(i=0;i<97;i++)
s1[i+3]=add(s1[i],s1[i+1],s1[i+2]);
cout<<s1[99]<<endl;
}
return 0;
}
poj1503
Sample Input
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
Sample Output
370370367037037036703703703670
#include <iostream>
#include <string>
using namespace std;
#define SIZE 105
string s;
int sum[SIZE]={0};
int main()
{
int i,j;
while(cin>>s&&s.compare("0"))
{
for(j=SIZE-1,i=s.size()-1;i>=0;--i)
sum[j--]+=(s[i]-'0');
}
j=0;//处理时去除前面的零
while(!sum[j])
++j;
if(j>=SIZE)
printf("0");
for(i=SIZE-1;i>=j;i--)//处理进位
{
sum[i-1]+=sum[i]/10;
sum[i]=sum[i]%10;
}
i=0;//输出前去除前面的零
while(!sum[i])
++i;
for(;i<SIZE;i++)
cout<<sum[i];
cout<<endl;
}