【九度】题目1125:大整数的因子

题目1125:大整数的因子
时间限制:1 秒内存限制:32 兆特殊判题:否提交:766解决:375
题目描述:
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k.
输入:
若干个非负整数c,c的位数<=30
每行一个c,当c=-1时中止
(不要对-1进行计算!)
输出:
每一个c的结果占一行
1) 若存在满足 c%k == 0 的k,输出所有这样的k,中间用空格隔开,最后一个k后面没有空格。
2) 若没有这样的k则输出"none"
样例输入:
30
72
13
-1
样例输出
2 3 5 6
2 3 4 6 8 9
none
提示:
注意整数溢出问题
不要对-1进行计算
来源:
2008年北京大学方正实验室计算机研究生机试真题
答疑:
解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7848-1-1.html
【解题思路】
1、Java中有BigIntger,可以直接mod判断结果是否为0
2、直接用除法,思路就是上一位取余数*10加上当前位除以k,一直到所有位判断完毕,这个其实就是手算除法的模拟过程。

Java 1 AC

import java.math.BigInteger;
import java.util.Scanner;
   
public class Main {
    /*
     * 1125 2014年6月5日17:34:07
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String num = scanner.next();
            if (num.equals("-1")) {
                break;
            }
            BigInteger numBig = new BigInteger(num);
            boolean flag = false;
            StringBuffer sb = new StringBuffer();
            int k = 2;
            while (k >= 2 && k <= 9) {
                if (numBig.mod(new BigInteger(k + "")).toString().equals("0")) {
                    flag = true;
                    sb.append(k + " ");
                }
                k++;
            }
            String result = (flag == true) ? 
                    sb.toString().trim() : "none";
            System.out.println(result);
        }
    }
}
/**************************************************************
    Problem: 1125
    User: wangzhenqing
    Language: Java
    Result: Accepted
    Time:1300 ms
    Memory:101376 kb
****************************************************************/
Java 2 AC

import java.util.Scanner;
   
public class Main {
    /*
     * 1125 2014年6月5日17:34:07
     */
    private static int len;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String num = scanner.next();
            if (num.equals("-1")) {
                break;
            }
            len = num.length();
            boolean flag = false;
            StringBuffer sb = new StringBuffer();
            int k = 2;
            while (k >= 2 && k <= 9) {
                if (isTrue(num, k)) {
                    flag = true;
                    sb.append(k + " ");
                }
                k++;
            }
            String result = (flag == true) ? 
                    sb.toString().trim() : "none";
            System.out.println(result);
        }
    }
 
    private static boolean isTrue(String num, int k) {
        int num1 = 0;
        int num2 = 0;
        for(int i = 0; i < len; i++){
            num1 = (num.charAt(i) - '0') + num2 * 10;
            num2 = num1 % k;
        }
        return num2 == 0 ? true : false;
    }
}
/**************************************************************
    Problem: 1125
    User: wangzhenqing
    Language: Java
    Result: Accepted
    Time:790 ms
    Memory:40420 kb
****************************************************************/
C++ 2 AC

#include <stdio.h>
#include <string.h>
const int maxLen = 32;
char numArr[maxLen];
int len;
 
bool isTrue(int k){
    int num1 = 0;
    int num2 = 0;
    for(int i = 0; i < len; i++){
        num1 = numArr[i] - '0' + num2 * 10;
        num2 = num1 % k;
    }
    return num2 == 0 ? true : false;
}
int main(){
    while(scanf("%s", numArr) != EOF){
        if(!strcmp(numArr, "-1")){
            break;
        }
        len = strlen(numArr);
        bool flag = false;
        bool first = true;
        int k = 2;
        while(k >= 2 && k <= 9){
            if(isTrue(k)){
                flag = true;
                if(first){
                    printf("%d", k);
                    first = false;
                }else{
                    printf(" %d", k);
                }
            }
            k++;
        }
        if(!flag){
            printf("none\n");
        }else{
            printf("\n");
        }
    }
    return 0;
}
/**************************************************************
    Problem: 1125
    User: wangzhenqing
    Language: C++
    Result: Accepted
    Time:30 ms
    Memory:1020 kb
****************************************************************/

你可能感兴趣的:(【九度】题目1125:大整数的因子)