链接:https://www.nowcoder.com/acm/contest/74/G;
解法1:
#include<iostream> #include<string.h> using namespace std; int a[1000001]; int pd(int n) { int a1,a2,a3,a4,a5,a6; a1=n%10;//个位 a2=n/10%10;//十位 a3=n/100%10;//百位 a4=n/1000%10;//千位 a5=n/10000%10;//万位 a6=n/100000%10;//十万位 if(a1==4||a2==4||a3==4||a4==4||a5==4||a6==4) return 1; else if(a2*10+a1==38||a3*10+a2==38||a4*10+a3==38||a5*10+a4==38||a6*10+a5==38) return 1; else return 0; } void gg() { for(int i=1;i<=1000000;i++) { if(pd(i)==1) { a[i]=a[i-1]+1; } else a[i]=a[i-1]; } return; } int main() { int n,m; memset(a,0,sizeof(a)); gg(); while(cin>>n>>m) { if(n==0&&m==0) break; else { if(n<4) cout<<a[m]<<endl; else cout<<a[m]-a[n-1]<<endl; } } return 0; }
解法2:
#include<stdio.h> #include<string.h> int s[1000001]; int main() { int n, sum, i, a, m; sum = 0; for (i = 1; i <= 1000001; i++) { for (a = i; a > 0; a = a / 10) { if (a % 10 == 4) { sum++; break; } if (a % 100 == 38) { sum++; break; } } s[i]=sum; } while (scanf("%d%d", &n, &m) && (n != 0 || m != 0)) { printf("%d\n", s[m]-s[n-1]); } return 0; }