UVa:10183 How Many Fibs?
发布时间:2020-12-14 03:54:59 所属栏目:大数据 来源:网络整理
导读:就是一道纯大数题,需要用到大数加法和大数比较。 一开始不知道哪里错了,后来改了改就A了。 ? #include iostream#include cstdlib#include cstdio#include cstring#include cmath#include algorithm#define MAXN 1005#define ll long longusing namespace s
就是一道纯大数题,需要用到大数加法和大数比较。 一开始不知道哪里错了,后来改了改就A了。 ? #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #define MAXN 1005 #define ll long long using namespace std; int Judge(char* a,char* b) //a>b 返回1,a<b返回-1,相同返回0 { int la=strlen(a),lb=strlen(b); if(la>lb) return 1; else if(la<lb) return -1; else { for(int i=0; i<la; ++i) if(a[i]>b[i]) return 1; else if(a[i]<b[i]) return -1; } return 0; } void Add(char a[],char b[],char back[]) { char c[MAXN]= {0}; int i=strlen(a)-1,j=strlen(b)-1,k=0; int x,y,z,up=0; while(i>=0||j>=0) { if(i<0) x='0'; else x=a[i]; if(j<0) y='0'; else y=b[j]; z=x-'0'+y-'0'+up; c[k++]=z%10+'0'; if(z>9) up=1; else up=0; i--; j--; } if(up) c[k++]='1'; c[k]=0; for(k=k-1,i=0; k>=0; --k) back[i++]=c[k]; back[i]=0; } char f[MAXN][MAXN]; char a[MAXN],b[MAXN]; int N; int main() { strcpy(f[1],"1"); strcpy(f[2],"2"); char big[MAXN]= {0}; big[0]='1'; for(int i=1; i<105; ++i) big[i]='0'; big[103]=0; for(int i=3;; ++i) { Add(f[i-1],f[i-2],f[i]); N++; if(Judge(f[i],big)>=0) break; } while(scanf("%s%s",a,b)) { if(!strcmp(a,"0")&&!strcmp(b,"0")) break; int ans=0; bool note=false; for(int i=1; i<=N; ++i) { if(Judge(f[i],b)>0) break; if(!note&&Judge(f[i],a)>=0) note=true; if(note) ans++; } printf("%dn",ans); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |