查找恶魔数字的算法问题
查找1000000以内恶魔数字,7是一个恶魔数字,如果一个数是7的倍数,或者它的数位上含有数字7,那么这个数也是恶魔数字。
**********************************************************************************************************
以下参考代码,如果是1000000的话,这个算法不是很好,还有更好的算法吗?
**********************************************************************************************************
#include <iostream>using namespace std;//判断是否是7的倍数 bool IsDivision(const int n,const int m =7){ return !(n%m);}//判断整数n中是否含有7 bool IsContain(const int n,const int m =7){ int temp = n; while(temp) { if( m == temp%10) return true; else temp /= 10; } return false;}int main(){ int n; cout<<"Enter n:"<<endl; cin>>n; for(int i=7;i<=n;++i) { if(IsDivision(i) || IsContain(i)) cout<<i<<endl; } system("pause"); return 0;}
#include <stdio.h>#include <stdlib.h>#include <string.h>int is_evil(int n){#define STR_LEN 8 static char str_n[STR_LEN];#undef STR_LEN if (n >= 0 && n <= 1000000) { if (n % 7 == 0) { return 1; } sprintf(str_n, "%d", n); char *pos = strchr(str_n, '7'); if (pos != NULL) { return 1; } return 0; } return -1; //out of range}int main(){ for (int i = 0; i <= 1000000; ++ i) { if (is_evil(i) == 1) { printf("%d is evil\n", i); } } return 0;}
[解决办法]
我觉得不能这样求解。
应该先分析。
比如 N 以内那些数字的数位有 7 ,这些是固定的。
那些是 7 的倍数,可以直接 + 求解。
滤去相同的就可以了。
不要把什么都交给计算机。
应该先有数学分析。
[解决办法]