HDU 1568 Fibonacci ★(取科学计数法)
2013-02-01 23:06
357 查看
题目大意:问fibonacci数列的第n项的前四个数.
很好的一道题~~~如果取后几位的话,取模就可以了,但取前几位显然没这么简单= =……
但假如我们能把它表示成小数(科学计数法)的话,那么要取几位我们乘对应的几个10就可以了(前提是取的位数在计算机表示小数的精确范围之内)~~~
取对数log10可以非常美的完成它:
假设给出一个数10234432,那么log10(10234432)=log10(1.0234432*10^7)=log10(1.0234432)+7;
log10(1.0234432)就是log10(10234432)的小数部分.
log10(1.0234432)=0.010063744
10^0.010063744=1.023443198
那么要取几位就很明显了吧~
先取对数(对10取),然后得到结果的小数部分bit,pow(10.0,bit)以后如果答案还是<1000那么就一直乘10。
[code]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)>>1)
const double f=(sqrt(5.0)+1.0)/2.0;
using namespace std;
typedef long long LL;
int fab[21];
int main(){
int n;
fab[1] = 1;
for (int i = 2; i <= 20; i ++)
fab[i] = fab[i-1] + fab[i-2];
while(cin >> n){
if (n <= 20){
cout << fab
<< endl;
continue;
}
double log10_fabn = -0.5*log(5.0)/log(10.0)+((double)n)*log(f)/log(10.0);//忽略最后一项无穷小
log10_fabn = log10_fabn - (int)log10_fabn;
double num = pow(10, log10_fabn);
while(num < 1000)
num *= 10;
cout << (int)num <
很好的一道题~~~如果取后几位的话,取模就可以了,但取前几位显然没这么简单= =……
但假如我们能把它表示成小数(科学计数法)的话,那么要取几位我们乘对应的几个10就可以了(前提是取的位数在计算机表示小数的精确范围之内)~~~
取对数log10可以非常美的完成它:
假设给出一个数10234432,那么log10(10234432)=log10(1.0234432*10^7)=log10(1.0234432)+7;
log10(1.0234432)就是log10(10234432)的小数部分.
log10(1.0234432)=0.010063744
10^0.010063744=1.023443198
那么要取几位就很明显了吧~
先取对数(对10取),然后得到结果的小数部分bit,pow(10.0,bit)以后如果答案还是<1000那么就一直乘10。
[code]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)>>1)
const double f=(sqrt(5.0)+1.0)/2.0;
using namespace std;
typedef long long LL;
int fab[21];
int main(){
int n;
fab[1] = 1;
for (int i = 2; i <= 20; i ++)
fab[i] = fab[i-1] + fab[i-2];
while(cin >> n){
if (n <= 20){
cout << fab
<< endl;
continue;
}
double log10_fabn = -0.5*log(5.0)/log(10.0)+((double)n)*log(f)/log(10.0);//忽略最后一项无穷小
log10_fabn = log10_fabn - (int)log10_fabn;
double num = pow(10, log10_fabn);
while(num < 1000)
num *= 10;
cout << (int)num <
相关文章推荐
- HDU 1568 Fibonacci ★(取科学计数法)
- hdu 1568 Fibonacci
- hdu 1568 Fibonacci 快速幂
- HDU-1568-Fibonacci【求高位数字】
- HDU 1568 Fibonacci 公式求斐波那契数列
- HDU 1568 Fibonacci【数学】
- hdu 1568 Fibonacci
- HDU 1568 Fibonacci(科学计数法+对数)
- hdu-1568 Fibonacci
- HDU 1568 Fibonacci
- HDU 1568 Fibonacci
- hdu 1568 Fibonacci 对数。。
- hdu 1568 Fibonacci(Fibonacci通项公式)
- hdu 1568 Fibonacci (数论)
- hdu 1568 Fibonacci
- hdu 1568 Fibonacci
- [斐波那契前n位 数学技巧] HDU 1568 Fibonacci
- HDU 1568 - Fibonacci
- HDU 1568 Fibonacci(斐波那契前四位)
- HDU 1568 Fibonacci