NYOJ114 某种序列

 

某种序列

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
 
描述
数列A满足An = An-1 + An-2 + An-3, n >= 3 
编写程序,给定A0, A1 和 A2, 计算A99
 
输入
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
对于输入的每一行输出A99的值
样例输入
1 1 1
样例输出
69087442470169316923566147

 1 #include<stdio.h>
 2 #include<string.h>
 3 int a[40],b[40],c[40];
 4 
 5 void add(int *a,int *b,int *c)
 6 {
 7  int i;
 8  for(i=0;i<40;++i)
 9  {
10   a[i]=a[i]+b[i]+c[i];
11   a[i+1]+=a[i]/10;
12   a[i]=a[i]%10;
13  }
14 }
15 int main()
16 {
17  int A,B,C,i;
18  while(scanf("%d%d%d",&A,&B,&C)!=EOF)
19  {
20   i=0;
21   memset(a,0,sizeof(a));
22   memset(b,0,sizeof(b));
23   memset(c,0,sizeof(c));
24   while(A||B||C)
25   {
26    a[i]=A%10;
27    A/=10;
28    b[i]=B%10;
29    B/=10;
30    c[i]=C%10;
31    C/=10;
32    ++i;
33   }
34   for(i=3;i<99;i+=3)
35   {
36    add(a,b,c);
37    add(b,a,c);
38    add(c,a,b);
39   }
40   add(a,b,c);
41   i=39;
42   while(i>0&&a[i]==0)
43    --i;
44   if(i==0)//注意输入三个0的情况
45   {
46    printf("%d\n",a[0]);
47    continue;
48   }
49   for(;i>=0;--i)
50    printf("%d",a[i]);
51   printf("\n");
52  }
53  return 0;
54 }


 
功不成,身已退
原文地址:https://www.cnblogs.com/dongsheng/p/2540152.html