度度熊与数字
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
对于每一个询问,输出两行,第一行包含一个正整数 m,m 代表对于该询问的 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 也都是答案。
题目大意是让求 V
与 V的各位和
的公共因子,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;
}