Problem : 319 - 幸運數
Problem:
自古以來就知道4 與7 是幸運的數字,當一個數字的每一位數都由4 或7 所組成,我們稱之為幸運數,像"4747", "444", "447774" 都是幸運數,但"1444", "12345" 都不是幸運數。
現在出一道考題給你,請問[l, r]之間有多少數字是幸運數呢?
現在出一道考題給你,請問[l, r]之間有多少數字是幸運數呢?
Input:
兩個數字,分別是l與r(l < r)。
保證總共有10\%的測試資料滿足1≤l≤r≤10 。\\
保證總共有50\%的測試資料滿足1≤l≤r≤105 。\\
對於所有測試資料滿足1≤l≤r≤109 。
保證總共有10\%的測試資料滿足
保證總共有50\%的測試資料滿足
對於所有測試資料滿足
Output:
輸出一個數字,表示[l,r]之間有多少幸運數。
Sample Input:
Sample #1:
4 7
Sample #2:
10 100
Sample #3:
444 4747478
4 7
Sample #2:
10 100
Sample #3:
444 4747478
Sample Output:
Sample #1:
2
Sample #2:
4
Sample #3:
164
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);
}
沒有留言:
張貼留言