首先打表,然后就是比较了,比较恶心了一点,注意用compare比较 8 12会有 8>12,注意一下比较函数
测试数据:
input:
83 346930886
77 214636915
93 424238335
86 149760492
49 189641421
62 350490027
ouput :
32
31
31
30
32
32
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<algorithm> using namespace std; int s[501][110]; char str1[110] , str2[110]; char tem[501][110] = {'0'}; void Plus() { int i , j , k , count; memset(s,0,sizeof(s)); s[1][0] = 1; s[2][0] = 2; for(i = 3;i <= 501;i++) { for(j = 0;j <= 105;j++) { s[i][j] += s[i-1][j]+s[i-2][j]; if(s[i][j] >= 10) { s[i][j+1] += s[i][j]/10; s[i][j] %= 10; } } } for(i = 1;i <= 500;i++) { j = 105; while(j--) { if(s[i][j] != 0) { break; } } for(k = 0;j >= 0;j--,k++) { char ch = s[i][j] + 48; tem[i][k] = ch; } } } void cmp() { int i , j , count , mark; int l1 , l2; l1 = strlen(str1); l2 = strlen(str2); for(i = 1;i <= 500;i++) { int len = strlen(tem[i]); if(l1 < len|| (l1 == len && strcmp(str1,tem[i])<=0))//这里判断左边界限 { mark = i; break; } } count = mark; for(i = mark;i <= 500;i++) { int len = strlen(tem[i]); if(l2 < len||(l2 == len && strcmp(str2,tem[i])<0))//这里判断右边界限 { mark = i; break; } } cout<<mark-count<<endl; } int main() { int i , j; Plus(); while(1) { cin>>str1>>str2; if(strcmp(str1,"0") == 0 && strcmp(str2,"0") == 0) break; else { cmp(); } } return 0; }