考研机试 39.大整数因子

时间:2021/03/07

一.题目描述

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

输入描述

若干个非负整数c,c的位数<=30
每行一个c

输出描述

每一个c的结果占一行
1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出"none"

注意整数溢出问题
不要对-1进行计算

题目链接

https://www.nowcoder.com/practice/3d6cee12fbf54ea99bb165cbaba5823d?tpId=40&tqId=21370&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey

二.算法

题解

注意题目中说不要对-1进行计算,所以在读取输入后要进行判断,如果为-1则不进行任何操作。然后将读取的字符串转化为BigInteger对象,之后循环取模来输出因子。

代码

import java.util.Scanner;
import java.math.BigInteger;

public class Main{
    
    public static void main(String[] args){
        
        Scanner in = new Scanner(System.in);
        
        while(in.hasNext()){
            
            //读取输入
            String str = in.next();
            if(!str.equals("-1")){
                BigInteger num = new BigInteger(str);
            
                //计算因子
                boolean flag = false;
                for(int i = 2; i <= 9; i++){
                    BigInteger y = new BigInteger(i + "");
                    BigInteger zero = new BigInteger(0 + "");
                    if((num.mod(y)).equals(zero)){
                        flag = true;
                        System.out.print(i + " ");
                    }
                }
                if(!flag){
                    System.out.print("none");
                }
                System.out.println();
            }
        }
    }
}
努力,向上,自律
原文地址:https://www.cnblogs.com/machi12/p/14494356.html