Run ID:97465
提交时间:2024-11-15 23:03:33
#include <cstdio> #include <iostream> #include <cstring> using namespace std; int dp[10][10]; int digit[10]; void init() { dp[0][0] = 1; for (int i = 1; i <= 7; ++i) { for (int j = 0; j <= 9; ++j) { for (int k = 0; k <= 9; ++k) { if ( j != 4 && !(j==6 && k==2)) { dp[i][j] += dp[i-1][k]; } } } } } long long solve(int x) { int len = 0; while(x){ digit[++len] = x%10; x /= 10; } digit[len+1] = 0; long long res = 0; for (int i = len; i >= 1; --i ) { for (int j = 0; j < digit[i]; ++j) { if (j != 4 && !(j == 2 && digit[i] == 6)) res += dp[i][j]; } if (digit[i] == 4 || (digit[i] == 2 && digit[i+1] == 6)) break; } return res; } int main() { int n,m; init(); while(1){ cin >> n >> m; memset(digit,0,sizeof(digit)); if (n==0 && m==0) break; cout << solve(m+1) - solve(n) << endl; } return 0; }