POJ - 2325 Persistent Numbers
题意:给定一个数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();
}
}
}
}
}