大整数的因子

题目描述
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.

输入描述:
若干个非负整数c,c的位数<=30
每行一个c

输出描述:
每一个c的结果占一行

  1. 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
  2. 若没有这样的k则输出"none"
    注意整数溢出问题
    不要对-1进行计算

示例1
输入
30
72
13
-1
输出
2 3 5 6
2 3 4 6 8 9
none

题目解析:还是多位数的问题,因为30位的十进制数机器无法全部显示,所以使用字符串代替,再逐步计算。和大数阶乘实际上类似。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<map>
#include<set>
#include<vector>

using namespace std;

int main()
{
	string number;
	while(cin >> number){
		if(number == "-1"){
			break;
		}
		int count = 0;    //记录是否有因子 
		for(int i = 2 ; i <= 9 ; i++){
			int k = 0;
			for(int j = 0 ; j < number.size(); j++){
				k = ((number[j] - '0') + k * 10) % i;     //高位剩下的数*10+低一位 再继续进行求解 
			}
			if(k == 0){   //可以整除 
				count++;
				cout << i << " ";
			}	
		}
		if(count == 0){
			cout << "none" << " ";
		}
		cout << endl;
	} 
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值