`
从此醉
  • 浏览: 1046249 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

HDOJ 1316

 
阅读更多

点击打开链接


首先打表,然后就是比较了,比较恶心了一点,注意用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;
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics