题意:给定一个数N,求一个数M,要求:将M的各个位的数相乘得到N,M最小。依次输出能够被整除的数字
思路:用到高精度除法,将给定的数从9开始试除,接着试除8,7,6,5,4,3,2。
0
<
=
N
<
=
1
0
1000
0<=N<=10^{1000}
0<=N<=101000
因为有大数除法,所以Java自带的BigInteger就很方便,直接从9-2循环找答案,用一个字符串res存起来,最后直接输出字符串即可,
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { BigInteger num=cin.nextBigInteger(); if(num.equals(BigInteger.valueOf(-1))) break; //多实例结束的标志 if(num.compareTo(BigInteger.TEN)<0)//小于10,加10输出 System.out.println(num.add(BigInteger.TEN)); else { String res=""; boolean flag=false; while(num.compareTo(BigInteger.ONE)!=0)//是否被整除完毕 { int i; for(i=9;i>=2;i--) { BigInteger a=BigInteger.valueOf(i); if(num.remainder(a).equals(BigInteger.ZERO)) { res+=i; num=num.divide(a); break; } } if(i==1) { flag=true; break; } } if(flag) System.out.println("There is no such number."); else { char []array=res.toCharArray(); for (int i = array.length - 1; i >= 0; i--) System.out.printf("%c",array[i]); System.out.println(); } } } } }