HITOJ 1864 求Fibonacci数列的位数
2014-07-25 16:35
134 查看
http://acm.hit.edu.cn/hoj/problem/view?id=1864
一个Fibonacci数列是这样定义的: f(1) = 1, f(2) = 1, f(n > 2) = f(n - 1) + f(n - 2)
现在你的任务是, 对于每个给定的数K,计算f(K)的位数。
输入
第一行一个数N, 表示下面有N个测试数据。
紧接着下面N行, 每行一个整数K ( 1 <= K <= 2^32 -1 )
输出
对于每个输入K, 输出f(K)的位数, 每个输出占一行。
示例输入
示例输出
题目大意:给定一个数n,求第n个Fibonacci数的位数
大体思路:
其实如果不嫌麻烦的话你可以用高精度来做。除此之外还有另外一种方法,利用斐波那契数列数列的公式,然后利用log10(n)+1即为位数。值得一提的是对于n比较小的数我们不能用该公式,应该用暴力的方法直接求出f(n),
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
using namespace std;
long long a[45];
int main()
{
int T;
scanf("%d",&T);
a[0]=0;
a[1]=1;
for(int i=2;i<40;i++)
a[i]=a[i-1]+a[i-2];
while(T--)
{
long long n,len;
scanf("%lld",&n);
if(n<40)
len=(int)log10(a
)+1;
else
len=(int)(log10(1.0/sqrt(5)) +(double)n*log10((1.0+sqrt(5))/2.0))+1;
printf("%lld\n",len);
}
return 0;
}
一个Fibonacci数列是这样定义的: f(1) = 1, f(2) = 1, f(n > 2) = f(n - 1) + f(n - 2)
现在你的任务是, 对于每个给定的数K,计算f(K)的位数。
输入
第一行一个数N, 表示下面有N个测试数据。
紧接着下面N行, 每行一个整数K ( 1 <= K <= 2^32 -1 )
输出
对于每个输入K, 输出f(K)的位数, 每个输出占一行。
示例输入
5 1 2 3 10 20
示例输出
1 1 1 2 4
题目大意:给定一个数n,求第n个Fibonacci数的位数
大体思路:
其实如果不嫌麻烦的话你可以用高精度来做。除此之外还有另外一种方法,利用斐波那契数列数列的公式,然后利用log10(n)+1即为位数。值得一提的是对于n比较小的数我们不能用该公式,应该用暴力的方法直接求出f(n),
代码如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
using namespace std;
long long a[45];
int main()
{
int T;
scanf("%d",&T);
a[0]=0;
a[1]=1;
for(int i=2;i<40;i++)
a[i]=a[i-1]+a[i-2];
while(T--)
{
long long n,len;
scanf("%lld",&n);
if(n<40)
len=(int)log10(a
)+1;
else
len=(int)(log10(1.0/sqrt(5)) +(double)n*log10((1.0+sqrt(5))/2.0))+1;
printf("%lld\n",len);
}
return 0;
}
相关文章推荐
- Java之 求Fibonacci数列:1,2,3,5,8,13.。。。。前十位数的和
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- 查看LINUX操作系统及位数
- 关于CPU位数,OS位数以及内存大小关系的一点总结
- 【看书】输出不确定位数的小数
- matlab中 数据保留有效位数
- python---三位数
- 预测2016:个位数的O2O的必然活路
- 51nod 1435 位数阶乘 (简单题)
- Fibonacci数列--矩阵乘法优化
- C语言笔试经典-查找多位数重复数字以及次数
- oracle 取小数位数
- 【codevs1732】Fibonacci数列 2(矩阵快速幂)
- (C++)保留小数点位数
- pat1021:个位数统计
- android:限制EditText输入位数
- nyoj--148 fibonacci数列(二)(矩阵快速幂)
- SDUT 3503 有两个正整数,求N!的K进制的位数
- hdu 1864 最大报销额01背包dp
- 第1周 项目(A)-7分离一个三位数——个、十、百单独成数