不要62

此代码超时

#include <stdio.h>
#include <string.h>
int main()
{
int i,n,m,t;
char s[10];
     while(scanf("%d %d",&n,&m)!=EOF)
      {       t=0;
                  for(i=n;i<=m;i++)
                    {
                          sprintf(s,"%d",i);
                          if(strstr(s,"62")||strstr(s,"4")) t++;
                      }
               printf("%d\n",m-n+1-t);
       }
return 0;
}

更正后

#include <stdio.h>
#include <string.h>
int a[1000024]={0};
int main()
{
        int i,n,m,t;
            char s[10];
           for(i=1;i<=1000000;i++)
               {
                  sprintf(s,"%d",i);
             if(!(strstr(s,"62")||strstr(s,"4"))) a[i]=1;
               }
       while(scanf("%d %d",&n,&m)!=EOF)
         {   t=0;
             if(n==0&&m==0) break;
              for(i=n;i<=m;i++)
                   {
                      if(a[i]==1) t++;
                    }
                printf("%d\n",t);
           }
return 0;
}

此次用到函数sprintf(s,"%d",i),是将数字转换为字符串的;

还有一个函数itoa(i,s,10);  后面的10是指十进制,头文件<stdlib.h>中,与之有相反功能的函数是atoi

#include <stdlib.h>
#include <stdio.h>
 
int main(void)
{
    int n;
    char *str = "12345.67";
    n = atoi(str);
    printf("int=%d\n",n);
    return0;
}
strstr
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。找到所搜索的字符串,则该函数返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,则返回NULL。
头文件:#include <string.h>

 

posted on 2015-05-05 17:01  l-m  阅读(82)  评论(0编辑  收藏  举报