正文

ct5_3: 恶魔数字7★2008-02-29 21:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yaotou/33074.html

分享到:

ct5_3: 恶魔数字7★题目描述:7是一个恶魔数字,如果一个数是7的倍数,或者它的数位上含有数字7,那么这个数也是恶魔数字输入:多组测试数据,每组只有一行,一行只有一个整数n(1<=n<=1e(1e5)),最后输入一个0来表示结束输出:判断这个数是不是恶魔数字,是的话输出yes,否则输出no样例输入:7171470940样例输出:yesyesyesyesno难度:very easy 我的代码: #include<iostream>using namespace std; int main(void){ long dn; do {  int flag=0,k=10,temp=0;  cin>>dn;  if( dn>=1 && dn<=100000 )  {   if(dn%7==0) flag=1;   else   {    while(dn>=10)    {     temp=dn%k;     dn/=k;     if(temp==7)     {      flag=1;      break;     }    }       }   if(flag==1) cout<<"yes"<<endl;   else cout<<"no"<<endl;  }  }while(dn!=0); return 0;} G++: Compile OKTest  1:    Time Limit Exceed--------------------------------Problem ID     ct5_3Test Result    Time Limit ExceedTime Limit     100 msTotal Memory   144 Kb / 1000 KbCode Length    432 Bytes #include <iostream>#include<cstdlib>using namespace std;int main(void){        char a[10],*p,*q;    int aa=0;do{    int flag=0;    cin>>a;    p=a;    while(*p=='0')    p++;    aa=strtol(p,&q,0);    if(aa!=0)    {        if(aa%7==0)    flag=1;        while(*p!='\0')        {            if(*p=='7')    {flag=1;break;}            p++;        }        if(flag==1) cout<<"yes"<<endl;        else cout<<"no"<<endl;    }}while(aa!=0);        return 0;} G++: Compile OKTest  1:    Runtime Error--------------------------------Problem ID     ct5_3Test Result    Runtime ErrorTotal Time     NULLTotal Memory   132 Kb / 1000 KbCode Length    413 Bytes 别人的: 基本算法:由于数据很大,所以用字符串读入,然后逐个扫描,看有没有7,如果有,就直接输出yes,如果没有再进一步判断这个巨数是不是可以被7整除。由于模运算支持加减乘除的分配率,所以我们模拟把一个字符串转化为一个数的过程,在中间的步骤上都加上模运算,就可以求得这个数对7的模,这个方法值得注意的是:输入的数据有的带前导零的状况,字符串读入后,不能通过只判断第一位是否为零来判断输入的数据是否为零。优化方法:1.由于扫描,取模,判断前导零都是逐个扫描输入的字符,所以我们可以变读入边进行以上的处理,这就不  需要开数组来保存读入的数据,如果出现7就不用处理后面的数字了,直接读掉,这样可以加快速度.2.去模比较慢,由于每次要去模的数据不大,所以我们用一个循环,每次去减7,直到小于7为止,这样可  以提高速度参考标程:#define PB_ID ct5_3 #include <stdio.h> int main(void) {     int n;     for(;;)     {         int sum = 0;         int z = 0;         while((n=getchar())!='\n')         {             if(n>'0')             {                 z=1;                 if(n=='7')                 {                     sum = 0;                     while(getchar()!='\n');                     break;                 }             }             sum = sum * 3 + n - '0';             while(sum>=7)sum -= 7;         }         if(z==0)break;         if(sum==0)             puts("yes");         else             puts("no");     }     return 0; }他人2:#define CP_GCC #include <stdio.h> #include <string.h> #define N 100000 char a[N]; int main() {     int s, c;     char* p;     while(gets(a))     {         if(!strcmp(a, "0"))             break;         if(strchr(a, '7'))         {             puts("yes");             continue;         }         s=0;         p=a;         while(*p=='0')++p;         while(c=*p++) s=(3*s+c-48)%7;         s?puts("no"):puts("yes");        }         return 0; }

阅读(2418) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册