hdu 1715 大菲波数

这题的思路主要是大数用用字符串输出,先把字符串转化为用整形数组表示,再转化为字符串。。

View Code
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 char f[1001][2000]={"1","1","1"};
5 char sh[2000];
6 void sum(char a[ ],char b[ ])
7 {
8 // printf("%s to %s",a,b);
9 int len1,len2,i,j,k=0,c[2000];
10 memset(c,0,sizeof(c));
11 //memset(sh,' ' ,sizeof(sh));
12 len1=strlen(a),len2=strlen(b);
13 //printf("%d %d",len1,len2);
14 for(i=len1-1;i>=0;i--)
15 c[len1-i-1]=a[i]-48;
16 // printf("\n%d",c[0]);
17
18 for(j=len2-1;j>=0;j--)
19 c[len2-j-1]+=b[j]-48;
20 // printf("\n%d",c[0]);
21 len1=len1>len2?len1:len2;
22 for(i=0;i<=len1;i++)
23 if(c[i]>9)
24 {
25 c[i+1]+=c[i]/10;
26 c[i]-=10;
27 }
28 j=len1+2;
29 while(!c[j])
30 j--;
31 // printf("***%d ",j);
32
33 //for(i=0;i<=j;i++)
34 // printf("Abc:%d ",c[i]);
35 for(i=j;i>=0;i--)
36 sh[k++]=c[i]+48;
37 sh[k]='\0';
38 // printf("%s\n",sh);
39 }
40 int main( )
41 {
42 int i,j,k,N;
43 for(i=3;i<=1000;i++)
44 {
45 sum(f[i-1],f[i-2]);
46 strcpy(f[i],sh);
47 }
48 scanf("%d",&N);
49 while(N--)
50 {
51 scanf("%d",&k);
52 printf("%s\n",f[k]);
53 }
54 return 0;
55 }
56
57

posted on 2011-04-26 00:58  more think, more gains  阅读(194)  评论(0编辑  收藏  举报

导航