NYOJ 461-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

NYOJ 461

简介:   Fibonacci数列(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:4   描述 数学神童小明终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。

 

Fibonacci数列(四)

时间限制:1000 ms | 内存限制:65535 KB
难度:4
 
描述
数学神童小明终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。
接下来,CodeStar决定要考考他,于是每问他一个数字,他就要把答案说出来,不过有的数字太长了。所以规定超过4位的只要说出前4位(高4位)就可以了,可是CodeStar自己又记不住。于是他决定编写一个程序来测验小明说的是否正确。
 
输入
输入若干数字n(0 <= n <= 100000000),每个数字一行。读到文件尾结束。
输出
输出f[n]的前4个数字(若不足4个数字,就全部输出)。
样例输入
0
1
2
3
4
5
35
36
37
38
39
40
样例输出
0
1
1
2
3
5
9227
1493
2415
3908
6324
1023

 1 //http://blog.ac521.org/?p=91
 2 #include <stdio.h>
 3 #include <math.h>
 4 int main()
 5 {
 6     int a[21],i,n;
 7     double temp;
 8     for(i=2,a[0]=0,a[1]=1;i<=20;i++)
 9         a[i]=a[i-1]+a[i-2];                                                
10     while(scanf("%d",&n)!=EOF)
11     {
12         if(n<=20)  
13                printf("%d\n",a[n]);//必须有,否则不够四位时,用下面的会多输出0,即扩大倍数 
14         else 
15         {
16               temp=n*log((1+sqrt(5.0))/2.0)/log(10.0)-0.5*log(5.0)/log(10.0);
17               temp-=floor(temp);
18               temp=pow(10.0,temp);
19               while(temp<1000)
20                    temp*=10;
21               printf("%d\n",(int)(temp));
22           }                         
23      }
24     return 0;
25 }
26                                                                                                 
27                 

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章