题意很简单,给定一个n, 求一个最小的m,使得nm中的10进制表示只有0,1
方法1:Brute Force [大整数的情况需要考虑,何时终止,时间复杂度如何?]
bool CheckNumber(int number) { while(number) { if (number%10 != 0 && number%10 != 1) return false; number /= 10; } return true; } int CalcMBruteForce(int n) { int m = 1; while (!CheckNumber(m</em>n)) { m++; } return m; }
方法2:BFS [大整数的情况需要考虑,何时终止,去重复计算问题]
int CalcM(int number) { int i = 1; vector<</span>int> vList; vList.clear(); vList.push_back(0); vList.push_back(1); vector<</span>int> vListC; int k = 1; // TODO: // BigInt // Delete duplicate while (true) { vListC.clear(); for (vector<</span>int>::size_type i = 0;i <</span> vList.size();i++) { if (vList[i] && vList[i] % number == 0) { return vList[i]; } vListC.push_back(vList[i] + 0); vListC.push_back(vList[i] + (int)pow(10.0, k)); } vList.clear(); vList = vListC; k++; } }
XRumerTest 2016/02/17 23:02
Hello. And Bye.