1605 - 大整数的因子

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

已知正整数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"

输入/输出样例

输入格式

63
26
11
-1

输出格式

3 7 9
2
none

C语言解答

int len;
int cmp(int a[],int k)
{int i;
  
for(i=0;i<len-1;i++)
  a[i+1]+=(a[i]%k)*10;
if(a[i]%k==0) return 1;
else return 0;
}

int main(int argc, char* argv[])
{char num[31];
int i,b[11],j,k,tem[31];

while(gets(num))
{
if(num[0]=='-'&&num[1]=='1')break;
  len=strlen(num);
j=0;
for(k=2;k<10;k++)
{ 
	for(i=0;i<len;i++)
     tem[i]=num[i]-'0';  
 if(cmp(tem,k)) b[j++]=k;
}

if(j==0)printf("none\n");
 else for(i=0;i<j;i++)
  printf(j-i==1?"%d\n":"%d ",b[i]);

}
	return 0;
}

C++解答

#include <iostream>
#include <string>
using namespace std;

bool isDiv(string s,int k){
    int v = 0, r = 0;
    for(int i=0;i<s.length();i++){
        v = (s[i]-'0') + r * 10;
        r = v%k;
    }
    if(r==0){
        return true;
    }
    else{
        return false;
    }
}

int main(){
    string s;
    while(cin>>s){
        if(s=="-1"){
            return 0;
        }
        bool flag = true;
        for(int i=2;i<10;i++){
            if(isDiv(s,i)){
                if(flag){
                    cout<<i;
                }
                else{
                    cout<<" "<<i;
                }
                flag = false;
            }
        }
        if(flag){
            cout<<"none";
        }
        cout<<endl;
    }
    return 0;
}

Java解答


import java.math.BigInteger;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
	    String cString =new String();
		while(input.hasNext())
		{   
			cString=input.next();
			int sum=0;
			if (cString.equals("-1")) 
			{
				break;
			}
			BigInteger aBigInteger=new BigInteger(cString);
			BigInteger bigInteger =new BigInteger("2");
			BigInteger cBigInteger=new BigInteger("0");
			BigInteger dBigInteger=new BigInteger("1");
			for (int i = 2; i <=9; i++) 
			{
				if ((aBigInteger.mod(bigInteger)).equals(cBigInteger))
				{
					sum++;
					if (sum==1) 
					{
						System.out.print(i);
						
					}
					else {
						System.out.print(" "+i);
					}
					
				}
				bigInteger=bigInteger.add(dBigInteger);


				
			}
			if (sum==0)
			{
				System.out.print("none");
				
			}
			System.out.println();
			 
			
		}
	}

}