计算机考研真题 大整数的因子
题目描述
已知正整数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 */