POJ - 2325 Persistent Numbers(高精度除法,Java)

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();
                }
            }
        }
    }
}
上一篇:NX二次开发-UFUN向选择列表添加对象UF_UI_add_to_sel_list以及调用内部函数SEL_ask_persistent_context获得选择指针


下一篇:Linux sudo权限提升漏洞CVE-2021-3156 POC及复现过程