题目描述

已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入描述:
若干个非负整数c,c的位数<=30
每行一个c

输出描述:

每一个c的结果占一行

  1. 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
  2. 若没有这样的k则输出"none"

注意整数溢出问题
不要对-1进行计算

示例1
输入

30
72
13

输出

2 3 5 6
2 3 4 6 8 9
none

#include<bits/stdc++.h>
using namespace std;
int r=0;
struct bign{
	int d[10005];
	int len;
	bign(){
		memset(d, 0, sizeof(d));
		len = 0;
	}
};
bign divide(bign a, int b){
	bign c;
	c.len = a.len;
	for(int i = a.len-1; i >= 0; i--){
		r = r * 10 + a.d[i];
		c.d[i] = r / b;
		r = r % b;	
	}
	while(c.len-1>=1 && c.d[c.len-1] == 0){
		c.len--;
	}
	return c;
}


int main(){
	string str;
	bign u,s;
	while(cin>>str){
		if(str=="-1") break;
		vector<int> ans;
		u.len = str.size();
		for(int i=0;i<str.size();i++){
			u.d[i] = str[u.len-i-1] - '0';
		}
	
		for(int i=2;i<=9;i++){
			r = 0; 
			divide(u, i);
			if(r==0) ans.push_back(i);
		}
		if(ans.size() == 0){
			cout<<"none"<<endl;
		}else{
			for(int i=0;i<ans.size();i++){
				if(i>0) cout<<" ";
				cout<<ans[i];
			}
			cout<<endl; 
		}
	}
	return 0; 
}