入门经典 7.1.1 除法
May 22, 2013
开始没思路,但是仔细思考一下,发现可以枚举,然后找一下上界和下界,可以知道范围并不大。我的枚举量是将近50000的样子,书上说枚举量可以降低到10000……没懂,再想一下
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>
using namespace std;
map<int, bool> mymap;
void solve(int i) {
while (i) {
mymap[i%10] = true;
i /= 10;
}
}
void init() {
int n, i, j;
while (~scanf("%d", &n)) {
for (i = 1200; i < 50000; ++i) {
if ((i*n)/10000 == 0 || (i*n)/10000 >= 10) continue;
mymap.clear();
solve(i); solve(i * n);
if (i/10000 == 0) mymap[0] = true;
for (j = 0; j < 10; ++j) {
if (!mymap[j]) break;
}
if (j == 10) printf("%05d / %05d = %d\n", i*n, i, n);
}
}
}
int main(void) {
freopen("7.1.1.in", "r", stdin);
init();
return 0;
}
注意一下21行,就是当枚举的 i 的值是四位数字的时候,要把0标记。