HDU-2089-不要62

简介: HDU-2089-不要62
#include<stdio.h>
#define maxn 1000010
int f[maxn];
int weishu(int a)
{
  int b=1;
  while(1)
  {
    if(a/10 == 0) 
      break;
    else
    {
      a/=10;
      b++;
    }
  }
  return b;
} //此函数用于输出参数是几位 记录位数是为了下面方便标记不吉利的数
int fun(int x,int n)   //此处n是位数  x是要判断的数
{
  int flag=0;
  for(; n>0; n--)
  {
     if(x%10==4||x%100==62)
     {
        flag=1;
        break;
     }
     else
     x/=10;
    }
    return flag;
} //此函数用于将所有含有4或者62 的数字标记为 1
int main()
{
  int n,m,i,j,wei;
  for(i=4; i<maxn; i++)
  {
    wei=weishu(i);
    f[i]=fun(i,wei);
  }
  // 记录范围内不要的数 这里是打表用数组储存不要的数 避免数据过多超时
  while(~scanf("%d %d",&n,&m)&&n||m)
  {
    int ans=0;
    for(j=n; j<=m; j++)
       if(f[j])
         ans++;
    printf("%d\n",m-n-ans+1);
  } 
  return 0;
}

题目总结:

1、多数据重复处理问题 要记得使用自定义函数方便处理数据

2、学习用数据记录储存数据

3、此题考虑位数是关键

目录
相关文章
|
8月前
|
Java
hdu 1257 最少拦截系统
hdu 1257 最少拦截系统
28 0
|
8月前
|
Java 测试技术
hdu 1228 A + B
hdu 1228 A + B
33 0
|
机器学习/深度学习 人工智能