#include <iostream>
#include <cstring>
#include <stack>
using namespace::std;
// 從0位向最高位dfs搜索,每位要麼取0,要麼取1
// 並且保存搜索到當前節點算出的餘數ans,基數base
// 如果該位爲1,那麼ans=ans+base; 如果該位爲0,那麼ans=ans不變
int n; // 1 <= n <= 200
bool m[101]; // 用來表示大數m
bool bOne; // 排除全0的情況
bool solve(int pos, int base, int ans) {
if (pos >= 100) {
return ans == 0 && bOne;
}
if (solve(pos + 1, (base * 10) % n, ans)) return true;
m[pos] = 1; bOne = true;
if (solve(pos + 1, (base * 10) % n, (ans + base) % n)) return true;
m[pos] = 0;
return false;
}
int main(void) {
while ((cin >> n) && n != 0) {
memset(m, 0, sizeof(bool) * 101);
bOne = false;
solve(0, 1, 0);
int i = 100;
while (m[i] == 0) --i;
while (i >= 0) cout << m[i--];
cout << endl;
}
return 0;
}
E-POJ 1426
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.