2013年10月16日 星期三

[HOJ] 319 - 幸運數

Problem : 319 - 幸運數

Problem:
自古以來就知道4 與7 是幸運的數字,當一個數字的每一位數都由4 或7 所組成,我們稱之為幸運數,像"4747", "444", "447774" 都是幸運數,但"1444", "12345" 都不是幸運數。

現在出一道考題給你,請問[l, r]之間有多少數字是幸運數呢?
Input:
兩個數字,分別是l與r(l < r)。

保證總共有10\%的測試資料滿足1lr10。\\
保證總共有50\%的測試資料滿足1lr105。\\
對於所有測試資料滿足1lr109
Output:
輸出一個數字,表示[l,r]之間有多少幸運數。
Sample Input:
Sample #1:
4 7

Sample #2:
10 100

Sample #3:
444 4747478
Sample Output:
Sample #1:
2

Sample #2:
4

Sample #3:
164
---------------------------------------------------------------------------------------------------
#include<stdio.h>
char s[15];
int main(){
    int n,i,j,a=1,b=1,flag=1;
    scanf("%s",s);
    for(i=0;s[i];i++){
        if(s[i]=='4') a=a*2;
        else if(s[i]=='7') a=a*2+1;
        else{
            if(s[i]<'4') a=a*2;
            else if(s[i]<'7') a=a*2+1;
            else a++,a*=2;
            i++;
            break;
        }
    }
    for(j=i;s[j];j++) a*=2;
    scanf("%s",s);
    for(i=0;s[i];i++){
        if(s[i]=='4') b=b*2;
        else if(s[i]=='7') b=b*2+1;
        else{
            if(s[i]<'4') b=b*2;
            else if(s[i]<'7') b=b*2+1;
            else b++,b*=2;
            i++,flag=0;
            break;
        }
    }
    for(j=i;s[j];j++)
        b*=2;
    printf("%d\n",b-a+flag);
}

沒有留言:

張貼留言