大整数除法
题目描述 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入描述:若干个非负整数c,c的位数<=30 每行一个c
输出描述: 每一个c的结果占一行 1) 若存在满足 c%k == 0
的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。 2) 若没有这样的k则输出"none"注意整数溢出问题 不要对-1进行计算
#include<bits/stdc++.h>
using namespace std;
//求大整数除法的余数
int mod(string s,int a){
int plus=0;//前一位的余数
for(int i=0;i<s.length();i++)
{
int now=plus*10+(s[i]-'0');
plus=now%a;
}
return plus;
}
int main()
{
string c;
int flag=0;//此方法针对除最后一个数之外,其余数后都有空格的题目要求
while(cin>>c&&c!="-1")
{
for(int i=2;i<=9;i++)
{
if(mod(c,i)==0)
{ if(flag) cout<<" ";
else flag=1;
cout<<i;
}
}
if(!flag) cout<<"none";
cout<<endl;
}
return 0;
}