度度熊与数字[公因数]----2019 年百度之星·程序设计大赛 - 初赛二:1001

度度熊与数字

Accepts: 3638 Submissions: 7683
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Problem Description

度熊发现,11, 33 以及 99 这三个数字很神奇,它们的所有的倍数的每位数字的和一定是自己的倍数。例如说: 5454 是 33 的倍数,同时 5+4 = 95+4=9 也是 33 的倍数。在另一个例子 666666 是 99 的倍数,同时 6+6+6 = 186+6+6=18 也是 99 的倍数。
度熊又发现,除了 11, 33, 99 以外的的正整数,虽然并不满足"所有的倍数的每位数字的和一定是自己的倍数",但也存在一些数是它们的倍数且各位数字和也是它们的倍数。例如说,888888 是 1212 的倍数,且他的各位数字和 8+8+8=248+8+8=24 也是 1212 的倍数。
现在度熊想知道,给你一个正整数 VV,是否存在一个数 xx,使得 VV 是 xx 的倍数,同时它的每位数字的和也是 xx 的倍数呢?请找出所有这样的数 xx。

Input

"有多组询问,第一行包含一个正整数 T 代表有几组询问,接着每组测试数据占一行,包含一个正整数 V

  • 1≤T≤100
  • 1≤V≤109

Output

对于每一个询问,输出两行,第一行包含一个正整数 mm 代表对于该询问的 V,有几个满足条件的 x。第二行输出 m 个数,把所有满足条件的 x 由小到大输出。

Sample Input

3
1
9
666666

Sample Output

1
1
3
1 3 9
6
1 2 3 6 9 18
Note
第一个询问中,11 的各位数和为 1=1×1,本身等于 1×1 都是 1 的倍数,故 1 确实为 V=1 的答案。
第三个询问中,666666 的各位数和为 36=9×4,本身等于 9×7474 都是 9 的倍数,故 9 确实为 V=666666 的答案,经过仔细计算后能发现,除 9 以外, 1,2,3,6,18 也都是答案。

题目大意是让求 VV的各位和 的公共因子,V的范围是 10e9 可得V各位和最大不超过100,暴力解如下。

代码:

//1001
#include<iostream> 
#include<vector>
using namespace std;

int main(){
	ios::sync_with_stdio(false) ;
	int t,v,tv,sum;
	vector<int> vec(100);
	cin>>t;
	while(t--){
		cin>>tv; v = tv;sum = 0; vec.clear();
		while(tv){
			sum += tv %10;
			tv /= 10;
		}
		for(int i = 1 ; i <= sum;i++ ){
			if(v % i == 0 && sum % i == 0)vec.push_back(i);
		}
		cout << vec.size()<<endl;
		for(int i = 0;i < vec.size();i++){
			cout<< vec[i];
			if(i == vec.size()-1) cout << endl;
			else cout << " ";
		}
	}

	return 0;
}
posted @ 2019-08-18 21:55  我不是张小毛  阅读(259)  评论(0编辑  收藏  举报