天天看点

nyoj_114_某种序列_201403161700

某种序列

时间限制: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      
来源
水题比赛中较不水的
上传者
hzyqazasdf

分析:sum=a+b+c;a=b;b=c;c=sum;

#include <stdio.h>
#include <string.h>
#define MAX 1010
int a[MAX],b[MAX],c[MAX],sum[MAX];
void init(int x,int *a)
{
    int i=0;
    while(x)
    {
        a[i++]=x%10;
        x/=10;
    }
}
int main()
{
    int aa,bb,cc;
    while(scanf("%d %d %d",&aa,&bb,&cc)!=EOF)
    {
        int i,j,t;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        init(aa,a);init(bb,b);init(cc,c);
        /*if(aa==0&&bb==0&&cc==0)
        {
            printf("0
");
            continue;
        }*/
        //for(i=0;i<10;i++)
        //printf("%d %d %d ",a[i],b[i],c[i]);
        for(i=3;i<=99;i++)
        {
            memset(sum,0,sizeof(sum));
            for(j=0;j<MAX;j++)
            {
                sum[j]+=(a[j]+b[j]+c[j]);
                if(sum[j]>9)
                {
                    t=sum[j];
                    sum[j]=t%10;
                    sum[j+1]=t/10;
                }
            }
            for(j=0;j<MAX;j++)
            {
                a[j]=b[j];
                b[j]=c[j];
                c[j]=sum[j];
            }
        }
        for(j=MAX-1;j>0&&sum[j]==0;j--);
        for(;j>=0;j--)
        printf("%d",sum[j]);
        printf("
");
    }
    return 0;
}
//ac      

//大数问题