题目链接:http://bailian.openjudge.cn/practice/2925
2925:大整数的因子
总时间限制:
1000ms
内存限制:
65536kB
描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
输入
一个非负整数c,c的位数<=30。
输出
若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
样例输入
30
样例输出
2 3 5 6
解题思路:
大整数除小整数的简单的一个应用,看是否能够被整除。
AC代码:
#include<iostream>
#include <string.h>
using namespace std;
char str[50];
int main(){
//感觉输入应该不会有空格
cin>>str;
bool flag=false;
int len=strlen(str);
for(int i=2;i<=9;i++){
//从左开始进行大整数除法
int t=0; //表示每一位处理完之后的余数
for(int j=0;j<len;j++){
//该位置的数字
int digit=str[j]-'0';
if(digit+t>=i){ //当前位够除
//当前位本身的数字加上进位
t=((digit+t)%i)*10;
}
else{
t=digit*10;
}
}
if(t==0){
cout<<i<<" ";
flag=true;
}
}
if(flag== false){
cout<<"none"<<endl;
}
return 0;
}