思路分析
运用大整数相除技巧即可。
大整数听起来高大上,但实际上就是我们小学学过的手算除法的步骤。
此处不多叙述,若不了解,见整除百科
代码解析
#include#include using namespace std; vector vec; bool judge(string c,int k){ //余数 int reminder = 0; //大整数相除判断 for(int i = 0;i < c.size();++i) reminder = (reminder * 10 + (c[i] - '0')) % k; //余数不为0,即不可整除 if(reminder) return false; return true; } int main() { string c; while(cin >> c && c != "-1"){ vec.clear(); //依次相除判断即可 for(int k = 2;k <= 9;++k) if(judge(c,k)) vec.push_back(k); for(auto it : vec) cout << it << " "; //若不存在 if(vec.size() == 0) cout << "none"; cout << endl; } }
运行结果



