poj3982~1503大数问题

poj3982
数列A满足An = An-1 + An-2 + An-3, n >= 3

编写程序,给定A0, A1 和 A2, 计算A99

Input

输入包含多行数据

每行数据包含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;
}

你可能感兴趣的:(poj)