题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入输出
输入描述:
若干个非负整数c,c的位数<=30
每行一个c
输出描述:
每一个c的结果占一行
1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出”none”
注意整数溢出问题
不要对-1进行计算
分析
大整数除法的简单版,没法直接取模,就模拟除法的过程。从第一位开始,余数*10与下一位结合。不知道为什么用之前大整数二进制的方法有一个样例过不了,应该是3,9我只输出了9.于是换了中思路简单的取模*10+下一位,过
注意这里最后一个是不能输出 多余空格的
代码
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cctype>
#include<cmath>
using namespace std;
vector<int>v;
int main()
{
int k;
string c;
while (cin>>c)
{
v.clear();
string h = c;
int len = c.length();
bool flag = false;
for (int k = 2; k <= 9; k++)
{
c = h;
len = c.length();
int cur = 0;
for (int i = 0; i < len; i++)
{
cur = cur * 10 + c[i] - '0';
cur = cur % k;
if (i == len - 1 && cur == 0) { v.push_back(k);
flag = true; }
}
}
if (flag == false)printf("none");
else {
int si = v.size();
for (int i = 0; i < si - 1; i++)
printf("%d ", v[i]);
printf("%d", v[si - 1]);
}
printf("\n");
}
}