题目描述

已知正整数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<iostream>
using namespace std;

int main()
{
    string str;
    while(cin>>str)
    {
        int tmp;int i;
        for(tmp=0,i=0;i<str.size();i++)
        {
            tmp*=10;
            tmp+=(str[i]-'0');
            if(tmp>=100000000)
                tmp%=2520;    //2520是2~9的最小公倍数
        }
        bool have=false;    //是否有因数
        for(i=2;i<=9;i++)
        {
            if(tmp%i==0)    //能整除
            {
                if(have==false)    //第一个因数输出时前面没有空格
                    cout<<i;
                else
                    cout<<' '<<i;
                have=true;
            }
        }
        if(have==false)cout<<"none";
        cout<<endl;
    }
}
/*
补充:
将这几个数分解质因数
2=2
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
然后看看后面的数是否能看成是前面若干个数相乘(不重复)可得出
2*3*2*5*7*2*3=2520
看上面的式子,包含2-9的质因数,所以答案应该是2520
*/