版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvlinfeng970/article/details/80251998
先静一静想了改了好多次终于ac
这篇好好写一下。。。
参考http://www.cnblogs.com/wenruo/p/4725005.html
import java.io.PrintWriter;
import java.util.Scanner;
public class Main{
static Scanner input = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
static int[][] dp = new int[8][10];
static void initial(){
for(int i=0;i<=9;i++){
if(i==4)continue;
dp[1][i] = 1;
}
for(int i=2;i<=7;i++){
for(int j=0;j<=9;j++){
if(j==4)continue;
for(int k=0;k<=9;k++){
if(j==6&&k==2)continue;
dp[i][j] += dp[i-1][k];
}
}
}
}
static int getans(int x){
int ans = 0;
String str = Integer.toString(x);
for(int i=1;i<=str.length();i++){
for(int j=0;j<str.charAt(i-1)-'0';j++){
if(i>1&&str.charAt(i-2)=='6'&&j==2)continue;
ans += dp[str.length()+1-i][j];
}
if(i>1&&str.charAt(i-2)=='6'&&str.charAt(i-1)=='2')break;
if(str.charAt(i-1)=='4')break;
}
return ans;
}
public static void main(String[] args){
initial();
while(input.hasNext()){
int l = input.nextInt();
int r = input.nextInt();
if(l==0&&r==0)break;
out.println(getans(r+1)-getans(l));
out.flush();
}
}
}