A24194. 大整数的因子
题目描述
大整数的因子
题目描述
已知正整数k满足2≤k≤9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入
一个非负整数c,c的位数≤30。
输出
若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
输入样例
30输出样例
2 3 5 6参考答案
int main()
{
int k, c;
cin >> c;
bool hasK = false;
for(int k = 2; k <= 9; ++k)
{
if(c % k == 0)
{
cout << k << ' ';
hasK = true;
}
}
if(hasK == false)
cout << "none";
return 0;
}答案解析
#include<bits/stdc++.h>
using namespace std;
#define N 35
//将字符数组转化为数字数组 数字数组从第1位置到第len位置,从低位到高位保存各位数字,第0位置保存数字位数
void toNum(char s[], int a[])
{
a[0] = strlen(s);
for(int i = 1; i <= a[0]; ++i)
a[i] = s[a[0] - i] - '0';
}
//高精模低精
int Mod(int a[], int b)
{
int x = 0;
for(int i = a[0]; i >= 1; --i)
x = (x * 10 + a[i]) % b;
return x;
}
int main()
{
int n, k, c[N] = {};
char s[N];
bool hasK = false;
cin >> s;
toNum(s, c);
for(k = 2; k <= 9; ++k)
{
if(Mod(c, k) == 0)
{
cout << k << ' ';
hasK = true;
}
}
if(hasK == false)
cout << "none";
return 0;
}