某种序列-大数计算
发布时间:2020-12-25 11:11:13 所属栏目:大数据 来源:网络整理
导读:某种序列 http://acm.nyist.net/JudgeOnline/problem.php?pid=114 时间限制:3000?ms ?|? 内存限制:65535?KB 难度:4 输入 输入包含多行数据? 每行数据包含3个整数A0,A1,A2 (0 = A0,A2 = 100000000)? 数据以EOF结束 输出 对于输入的每一行输出A99的值 样例
某种序列http://acm.nyist.net/JudgeOnline/problem.php?pid=114 时间限制:3000?ms ?|? 内存限制:65535?KB 难度:4 输入 输入包含多行数据? 输出 对于输入的每一行输出A99的值 样例输入 1 1 1 样例输出 69087442470169316923566147 描述 数列A满足An = An-1 + An-2 + An-3,n >= 3? ? 我的代码,使用二维数组,方便保存和计算 #include <stdio.h> #define MAX 100 int a[MAX][MAX]; int main(int argc,char *argv[]) { int x,y,z,i,j; while( scanf("%d %d %d",&x,&y,&z) != EOF){ //特殊情况一定要考虑 ::>_<:: if(!x && !y && !z){ printf("0n"); continue; } for(i=0;i<MAX;i++) for(j=0;j<MAX;j++) a[i][j]=0; j=0; while(x){a[0][j++]=x%10; x /= 10;} j=0; while(y){a[1][j++]=y%10; y /= 10;} j=0; while(z){a[2][j++]=z%10; z /= 10;} //求出a[99] int digit=0,t; for(i=3;i<MAX;i++){ digit=0; for(j=0;j<MAX;j++){ t=a[i-1][j]+a[i-2][j]+a[i-3][j]+digit; a[i][j] = t % 10; digit = t / 10; } } i=MAX-1; while(!a[MAX-1][i]) i--; for(;i>=0;i--) printf("%d",a[MAX-1][i]); printf("n"); } return 0; } ? 题目推荐 #include<stdio.h> #include<string.h> #include <stdlib.h> void add(char a[],char b[],char back[]) { int i,j,k,up,x,l; char *c; if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2; c=(char *) malloc(l*sizeof(char)); i=strlen(a)-1; j=strlen(b)-1; k=0;up=0; while(i>=0||j>=0) { if(i<0) x='0'; else x=a[i]; if(j<0) y='0'; else y=b[j]; z=x-'0'+y-'0'; if(up) z+=1; if(z>9) {up=1;z%=10;} else up=0; c[k++]=z+'0'; i--;j--; } if(up) c[k++]='1'; i=0; c[k]=' '; for(k-=1;k>=0;k--) back[i++]=c[k]; back[i]=' '; } int main() { char a[3][1000],temp[1000]; int roll=3; while(scanf("%s%s%s",a[0],a[1],a[2]) !=EOF) { for (int i=3;i<=99;i++) { add(a[(i-1)%3],a[(i-2)%3],temp); add(temp,a[(i-3)%3],a[i%3]); } printf("%sn",a[0]); } } (编辑:均轻资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |