标签:
Description
Input
Output
输出在a和b之间(满足a<=f(i)<=b)数的数量。
Sample Input
Sample Output
注:代码有点问题,系统过不了(hdu 1316)
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string.h> #include <malloc.h> using namespace std; void add(char* a,char* b,char* c) { int i,j,k,max,min,n,temp; char *s,*pmax,*pmin; max=strlen(a); min=strlen(b); if (max<min) { temp=max; max=min; min=temp; pmax=b; pmin=a; } else { pmax=a; pmin=b; } s=(char*)malloc(sizeof(char)*(max+1)); s[0]=‘0‘; for (i=min-1,j=max-1,k=max; i>=0; i--,j--,k--) s[k]=pmin[i]-‘0‘+pmax[j]; for (; j>=0; j--,k--) s[k]=pmax[j]; for (i=max; i>=0; i--) if (s[i]>‘9‘) { s[i]-=10; s[i-1]++; } if (s[0]==‘0‘) { for (i=0; i<=max; i++) c[i-1]=s[i]; c[i-1]=‘\0‘; } else { for (i=0; i<=max; i++) c[i]=s[i]; c[i]=‘\0‘; } free(s); } char a[360][360]; int main() { int i,x,y,flag1,flag2; char t1[105],t2[105]; strcpy(a[1],"1"); strcpy(a[2],"2"); for(i=3;i<360;i++) add(a[i-1],a[i-2],a[i]); while(cin>>t1>>t2) { if(strcmp(t1,"0")==0&&strcmp(t2,"0")==0) break; flag1=0;flag2=0; int len1=strlen(t1); int len2=strlen(t2); for(i=1;i<360;i++) { if(flag1==0&&strlen(a[i])==len1) { if(strcmp(a[i],t1)>=0) { flag1=1; x=i; } } if(flag1==0&&strlen(a[i])>len1) { flag1=1; x=i; } if(flag2==0&&strlen(a[i])==len2) { if(strcmp(a[i],t2)>=0) { flag2=1; y=i; if(strcmp(a[i],t2)>0) y--; } } if(flag2==0&&strlen(a[i])>len2) { flag2=1; y=i-1; } } cout<<y-x+1<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/chen9510/p/4734718.html