ACM 大数 某种序列

来源:互联网 发布:ofo登录 网络请求超时 编辑:程序博客网 时间:2024/05/23 00:01

原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=114

描述:

           数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1A2,计算A99

在编程过程中遇到的问题:

          本以为是很简单的for循环就可以解决的问题,没有想到在加的过程中数的位数会越来越多,导致出现精度问题。

我的收获:

         在该过程中,除了需要用到手工模拟加法运算的算法,而且还需要注意的是如何巧妙使其循环运算,这就需要用到数组的赋值。

代码:

#include <stdio.h>#include <string.h>int a[50],b[50],c[50],d[50];void init(){  memset(a,0,sizeof(a));  memset(b,0,sizeof(b));  memset(c,0,sizeof(c));  memset(d,0,sizeof(d));}void create(char s[],int num[]){  int i,j;  for(i=strlen(s)-1,j=0;i>=0;i--,j++)    num[j]=s[i]-'0';}int main(){  char s[50],s1[50],s2[50];  int i,j,k;  while(scanf("%s %s %s",&s,&s1,&s2)!=EOF){  init();  create(s,a);  create(s1,b);  create(s2,c);  for(i=0;i<=96;i++){    int s=0,v;    for(j=0;j<50;j++){       v=a[j]+b[j]+c[j]+s;       d[j]=v%10;       s=v/10;    }    for(j=0;j<50;j++){        a[j]=b[j];        b[j]=c[j];        c[j]=d[j];    }  }   j=49;  while(d[j]==0&&j>=0)    j--;    if(j<0)        printf("0\n");else{ // printf("%d",j); for(i=j;i>=0;i--)    printf("%d",d[i]);    printf("\n");  }}return 0;}

原创粉丝点击