问题 A: 大整数的因子
题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入
一个非负整数c,c的位数<=30。
输出
若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
样例输入
30
样例输出
2 3 5 6
提示
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,flag,s,t,x,k;
char c[50];
cin>>c;
k=strlen(c);
flag=0;
for(x=2;x<=9;x++)
{
s=0;
for(i=0;i<k;i++)
{
s=s*10+c[i]-'0';
if(s>=x)
s=s%x;
}
if(s==0&&flag==0)
{
cout<<x;
flag=1;
}
else if(s==0&&flag==1)
cout<<" "<<x;
}
if(flag==0)
cout<<"none";
}
思考
一开始使用了如下的判断方法,打算是找出一段倍数一部分一部分的减去,然后发现当是大数据的时候,如果不是因子的化就算是用long long s也会溢出,实际上,模拟小学的除法计算(取余数)简短的代码就可以解决
for(x=2;x<=9;x++)
{
k=t;
s=0;
for(i=0;i<k;i++)
{
s=s*10+c[i]-'0';
if(s%x==0)
s=0;
}
if(s==0&&flag==0)
{
cout<<x;
flag=1;
}
else if(s==0&&flag==1)
cout<<" "<<x;
}
感谢 想法来源China震震 侵删
链接