Find The Multiple
注意点:可以用一棵树来表示BFS中各个枝,左枝0,右枝1,然后n/2是n的父节点。类似于huffman树的定理,最后的输出序列由%2,/2交替运算得来。所以本题关键点就是用huffman树结构存储所有余数,并最终输出。
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
int n;
int mod[524286];
int main()
{
while (scanf("%d", &n) != EOF) {
if (n == 0) break;
memset (mod, 0, sizeof(mod));
mod[1] = 1 % n;
int i;
for (i = 2; mod[i - 1] != 0; i++) {
mod[i] = (mod[i / 2] * (10 % n) + i % 2) % n;
}
i--;
int pm = 0;
//printf("%d\n", i);
while (i) {
mod[pm++] = i % 2;
i = i / 2;
}
for (int j = pm - 1; j >= 0; j--) {
printf("%d", mod[j]);
}
printf ("\n");
}
return 0;
}