Link:点击打开链接
Problem:
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 3029 | Accepted: 1470 |
Description
679 -> 378 -> 168 -> 48 -> 32 -> 6.
That is, the persistence of 679 is 6. The persistence of a single digit number is 0. At the time of this writing it is known that there are numbers with the persistence of 11. It is not known whether there are numbers with the persistence of 12 but it is known that if they exists then the smallest of them would have more than 3000 digits.
The problem that you are to solve here is: what is the smallest number such that the first step of computing its persistence results in the given number?
Input
Output
Sample Input
0 1 4 7 18 49 51 768 -1
Sample Output
10 11 14 17 29 77 There is no such number. 2688
Source
错误代码:
import java.util.*;
import java.io.*;import java.math.*;
import java.text.*;
public class Main{
public static void main(String[] args)
{
BigInteger x;
int i;
String s;
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
x=cin.nextBigInteger();
if(x.compareTo(BigInteger.valueOf(-1))==0)
break;
if(x.compareTo(BigInteger.valueOf(10))<0)
{
System.out.println("1"+x);
}
else
{
s="";
for(i=9;i>=2;i--)
{
while(x.mod(BigInteger.valueOf(i))==BigInteger.valueOf(0))//这样写poj是wa!!!
{
s=i+s;
x=x.divide(BigInteger.valueOf(i));
}
}
if(x.compareTo(BigInteger.ONE)!=0)
{
System.out.println("There is no such number.");
}
else
{
System.out.println(s);
}
}
}
}
}
发现后改正AC代码:
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.*;
public class Main{
public static void main(String[] args)
{
BigInteger x;
int i;
String s;
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
x=cin.nextBigInteger();
if(x.compareTo(BigInteger.valueOf(-1))==0)
break;
if(x.compareTo(BigInteger.valueOf(10))<0)
{
System.out.println("1"+x);
}
else
{
s="";
for(i=9;i>=2;i--)
{
while(x.mod(BigInteger.valueOf(i)).compareTo(BigInteger.valueOf(0))==0)//就改了这一句就AC了!!!
{
s=i+s;
x=x.divide(BigInteger.valueOf(i));
}
}
if(x.compareTo(BigInteger.ONE)!=0)
{
System.out.println("There is no such number.");
}
else
{
System.out.println(s);
}
}
}
}
}

本文深入探讨了一个涉及多步骤数值处理的问题——持久数的计算,包括输入验证、数值分解及求解过程的实现。通过实例展示了如何使用Java进行高效计算,特别关注了算法优化和边界条件处理。详细阐述了从多个两位数到单个数字的转换过程,并提供了错误调试和解决方案,最终输出最小的满足给定条件的数值或明确告知不存在的数值。
1504

被折叠的 条评论
为什么被折叠?



