序列(大数)

来源:互联网 发布:缝纫机制造软件 编辑:程序博客网 时间:2024/05/22 15:56

表示已经很久没有自己去从思路的修改自己写的题目了‘

有两处小错误要注意

第一是输入时0 0 0的情况

第二是因为有进位的直接赋值,需要在计算时加上他本身原有的值

M - 序列
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu
Submit Status

Description

数列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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(){    int x,y,z,j,i,k,carry;    int a[100][1000];    while((scanf("%d %d %d",&x,&y,&z))!=EOF)    {        memset(a,0,sizeof(a));        if(x==0&&y==0&&z==0)        {            printf("0\n");            continue;        }        i=0;        while(x||y||z)        {            a[0][i]=x%10;            a[1][i]=y%10;            a[2][i]=z%10;            x=x/10;            y=y/10;            z=z/10;            i++;   //此时i为长度        }        for(j=3;j<=99;j++)        {            carry=0;            for(k=0;k<i;k++)            {                a[j][k]+=a[j-1][k]+a[j-2][k]+a[j-3][k]+carry;                carry=a[j][k]/10;                a[j][k]%=10;            }            if(carry!=0)            {                i++;                a[j][i-1]+=carry;            }        }        for(i--;i>=0;i--)        {            printf("%d",a[99][i]);        }        printf("\n");    }    return 0;}

0 0
原创粉丝点击