hdu 1316 How many Fibs?(高精度斐波那契数)
// 大数继续
f1 := 1
f2 := 2
fn := fn-1 + fn-2 (n >= 3)
Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b].
10 100
1234567890 9876543210
0 0
5
4
/**********************
高精度斐波数,依然用高精度的加法模板打表,打到520多就够了,
主要是判断数的大小,这里是比较额字符串形式的数的大小。
***********************/
Code:
#include<iostream>
#include <stdio.h>
#include<string>
using namespace std;
string add(string x,string y)
{
string ans ;
int lenx = x.length();
int leny = y.length();
if(lenx<leny)
{
for(int i = 1;i<=leny-lenx;i++)
x = "0"+x;
}
else
{
for(int i = 1;i<=lenx-leny;i++)
y = "0"+y;
}
lenx = x.length();
int cf = 0;
int temp;
for(int i = lenx-1;i>=0;i--)
{
temp = x[i] - '0' + y[i] - '0'+cf;
cf = temp/10;
temp%=10;
ans = char('0'+temp)+ans;
}
if(cf!=0)
ans = char(cf+'0')+ans;
return ans;
}
int compare(string x,string y)// 字符串形式的数的比较大小
{
int i,lenx = x.length(),leny = y.length(),leaf;
if(x==y) return 0;// 0 表示 x == y
if(x.length()>y.length()) return 1;// 返回1 表示 x > y
if(x.length()<y.length()) return -1;// -1 表示 x < y
if(x.length()==y.length())
{
for(i = 0;i<lenx;i++)
{
if(x[i]==y[i]) continue;
if(x[i]>y[i]) return 1;
else return -1;
}
return 0;
}
return leaf;
}
int main()
{
int i,j,k,start,eend;
string x,y,num[1005];;
num[0] = "0";
num[1] = "1";
num[2] = "2";
for(int i = 3;i<=1000;i++)
num[i] = add(num[i-1],num[i-2]);
while(cin>>x>>y&&x!="0"||y!="0")// x y 均为 0 的时候才结束程序
{
if(y == "0")// y == 0 时 直接输出 0
{
printf("0");
continue;
}
start = eend = 0;
/**
j = k = 0;
while(x[j]=='0')// 受到
j++;
x = x.substr(j,x.length()-j);// 受到 hdu 1753 的影响,以为会有前导0,其实没有 while(y[k]=='0')
k++;
y = y.substr(k,y.length()-k);
**/
for(i = 1;i<1000;i++)
{
if(compare(x,num[i])==0)
{
start = i;
break;
}
else if(compare(num[i],x)==-1&&compare(num[i+1],x)==1)
{
start = i+1;
break;
}
}
for(i = 1;i<1000;i++)
{
if(compare(y,num[i])==0){
eend = i;break;
}
else if(compare(num[i],y)==-1&&compare(num[i+1],y)==1){
eend = i;break;
}
}
if(x=="0") // 注意 x == 0 时的情况
start = 1;
//cout<<start<<" "<<eend<<endl;;
cout<<eend-start+1<<endl;
}
}
hdu 1316 How many Fibs?(高精度斐波那契数)的更多相关文章
- HDU 5914 Triangle(打表——斐波那契数的应用)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Problem Description Mr. Frog has n sticks, whos ...
- hdu 4983 线段树+斐波那契数
http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d, 修改k的为值增加d 2 l r, 查询l到r的区间和 3 l r, 从l到r区间 ...
- HDU.2516 取石子游戏 (博弈论 斐波那契博弈)
HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...
- HDU 2516 取石子游戏(斐波那契博弈)
取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU 5620 KK's Steel (斐波那契序列)
KK's Steel 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/J Description Our lovely KK ha ...
- hdu 2516 取石子游戏 (斐波那契博弈)
题意:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍. 取完者胜,先取者负输出"Second win",先取者胜 ...
- HDU 1021(斐波那契数与因子3 **)
题意是说在给定的一种满足每一项等于前两项之和的数列中,判断第 n 项的数字是否为 3 的倍数. 斐波那契数在到第四十多位的时候就会超出 int 存储范围,但是题目问的是是否为 3 的倍数,也就是模 3 ...
- hdu1316(大数的斐波那契数)
题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) pid=1316">http://acm.hdu.edu.cn/showproblem.php? pid=1316 这里 ...
- hdu1568&&hdu3117 求斐波那契数前四位和后四位
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1568 题意:如标题所示,求斐波那契数前四位,不足四位直接输出答案 斐波那契数列通式: 当n<=2 ...
随机推荐
- zabbix 3.0 安装
zabbix3.0安装注意: 1.PHP要5.4版本以上 2.防火墙关闭 3.selinux关闭 注:本操作系统为centos 6.5 X86 操作步骤 一.安装PHP 添加 epel 源 # r ...
- winform 多线程中ShowDialog()步骤无效的解决办法
private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(remind); thread.IsB ...
- 教你50招提升ASP.NET性能(十三):精选技巧集合
(19)A selection of tips 招数19: 精选技巧集合 Including height and width in <img /> tags will allow you ...
- cocos2d-x 手势之简单实现
转自:http://blog.sina.com.cn/s/blog_61ece099010187tl.html 手势之前也发过一篇,但是我感觉那个还不够轻巧. 而且大多数游戏里面不会有那么复杂的手势, ...
- 【55】让自己熟悉Boost
1.网址:http://boost.org 2.有很多C++组织和网站,但是Boost库有两个优势:a.和标准委员会关系密切:b.加入C++标准的各种功能的测试场.
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- htm explorer
链接:https://github.com/450640526/HtmExplorer 最低环境 系统安装了.NET 4.0 地址:http://www.baidu. ...
- PAT 1010
1010. Radix (25) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 11 ...
- linux高级命令组合
ps -auxww | grep httpd 快速找到正在运行的apache服务安装目录 find / -path 'sina_app_v3*' 快速找到根目录下面的sina_app_v3目录 fi ...
- How to Analyze Java Thread Dumps--reference
原文地址:http://architects.dzone.com/articles/how-analyze-java-thread-dumps The Performance Zone is pres ...