HDOJ 1316

2118 ワード

クリックしてリンクを開く
まず時計を打って、それから比較して、比較的に気持ちが悪くて、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;
}