加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

hdu1316(大数的斐波那契数)

发布时间:2020-12-14 02:58:38 所属栏目:大数据 来源:网络整理
导读:题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA) http://acm.hdu.edu.cn/showproblem.php?pid=1316 这里给出java代码和c++代码 C++:AC代码 #includeiostream #includestring using namespace std; string add(string s1,string s2){//字符串模拟大数

题目信息:求两个大数之间的斐波那契数的个数(C++/JAVA)

http://acm.hdu.edu.cn/showproblem.php?pid=1316


这里给出java代码和c++代码

C++:AC代码

#include<iostream>
#include<string>
using namespace std;
string add(string s1,string s2){//字符串模拟大数加法
??? string s;
??? int len1,len2;
??? len1=s1.size()-1; len2=s2.size()-1;
??? int i=0,flag=0;
??? while(len1>-1&&len2>-1){
??????? int sum=flag+(s1[len1--]-'0')+(s2[len2--]-'0');
??????? s+=char ((sum)%10+'0');
??????? flag=sum/10;
??? }
??? while(len1>-1){
??????? int sum=flag+(s1[len1--]-'0');
??????? s+=char ((sum)%10+'0');
??????? flag=sum/10;
??? }
??? while(len2>-1){
??????? int sum=flag+(s2[len2--]-'0');
??????? s+=char ((sum)%10+'0');
??????? flag=sum/10;
??? }
??? if(flag) s+=char ('0'+flag);
??? //cout<<s<<endl;
??? for(int i=0;i<s.size()/2;i++){
??????? char c=s[i];
??????? s[i]=s[s.size()-i-1];
??????? s[s.size()-i-1]=c;
??? }
??? return s;
}
int compareto(string s,string s1){//模拟大数(字符串)比较

??? int j,i,len=s.size(),len1=s1.size();
??? for(i=0;s[i]=='0';i++);//去掉前导0
??? for(j=0;s1[j]=='0';j++);//去掉前导0
??? if(len-i>len1-j) return 1;
??? else if(len-i<len1-j) return -1;
??? else for(;s[i]==s1[j]&&i<len;i++,j++);
??? if(s[i]>s1[j]) return 1;//s>s1
??? if(s[i]<s1[j]) return -1;//s<s1
??? return 0;
}
string s[501];
int main()
{
??? string a,b;
??? s[1]="1"; s[2]="2";
??? for(int i=3;i<=500;i++){
??????? s[i]=add(s[i-1],s[i-2]);
??????? //if(i<10) cout<<s[i]<<endl;
??? }
??? while(cin>>a>>b){
??????? if(a=="0"&&b=="0") break;
??????? //cout<<compareto(a,b)<<endl;
??????? int sum=0;
??????? for(int i=1;i<=500;i++){
??????????? if(compareto(s[i],a)>=0&&compareto(s[i],b)<=0){
??????????????? sum++;
??????????? }
??????? }
??????? cout<<sum<<endl;
??? }

??? return 0;
}

java代码:


import java.math.BigInteger; import java.util.Scanner; public class Main { ?? ?public static void main(String[] args) { ?? ??? ?BigInteger a,b; ?? ??? ?BigInteger s[] = new BigInteger[1501]; ?? ??? ?s[0]=BigInteger.ZERO; ?? ??? ?s[1]=BigInteger.ONE; ?? ??? ?s[2]=BigInteger.valueOf(2); ?? ??? ?for(int i=3;i<=1500;i++){ ?? ??? ??? ?s[i]=s[i-1].add(s[i-2]); ?? ??? ?} ?? ??? ?//System.out.println(s[1500]); ?? ??? ?Scanner sc = new Scanner(System.in); ?? ??? ?while(sc.hasNext()){ ?? ??? ??? ?a=sc.nextBigInteger(); ?? ??? ??? ?b=sc.nextBigInteger(); ?? ??? ??? ?if(a.add(b).compareTo(BigInteger.ZERO)==0) break; ?? ??? ??? ?int cnt=0; ?? ??? ??? ?//提高程序的鲁棒性 ?? ??? ??? ?if(a.compareTo(b)>0){ ?? ??? ??? ??? ?BigInteger tmp=a; ?? ??? ??? ??? ?a=b; ?? ??? ??? ??? ?b=tmp; ?? ??? ??? ?} ?? ??? ??? ?for(int i=1;i<=1500;i++){ ?? ??? ??? ??? ?if(s[i].compareTo(a)>=0&&s[i].compareTo(b)<=0){ ?? ??? ??? ??? ??? ?cnt++; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?System.out.println(cnt); ?? ??? ?} ?? ?} }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读