我有这个问题:
如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为palindrome
。对于不超过K
个数字的给定正整数1000000
,请将大于K
的最小回文值写入输出。始终显示数字而不带前导零。
输入
第一行包含整数t
,即测试用例的数量。在K
行中给出了整数t
。
输出
对于每个K
,输出大于K
的最小回文。
实施例
输入:
2
808
2133
输出:
818
2222
我的代码将输入转换为字符串,并评估字符串的任何一端进行相应的调整并向内移动。但是,问题要求它可以采用长达10 ^ 6位数的值,如果我尝试解析大数字,我会得到一个数字格式例外,即
Integer.parseInt(LARGENUMBER);
或
Long.parseInt(LARGENUMBER);
且LARGENUMBER
超出范围。任何人都可以想到一个解决方案或如何处理如此庞大的数字?
答案 0 :(得分:5)
您可以使用BigInteger类来处理这样的大整数。
然而,我不会指望它在如此庞大的尺寸上有效率。因为它仍然使用O(n^2)
算法进行乘法和转换。
答案 1 :(得分:5)
想想你现在所做的步骤。你是否看到一些似乎有点多余的东西,因为你将数字转换为字符串来处理它?</ p>
答案 2 :(得分:2)
虽然这个问题涉及整数,但它这样做只是为了限制输入和输出字符和格式。这是一个精心挑选的字符串操作问题。既然如此,你实际上不需要以整数形式读取输入,只需要读取字符串。
这将使回文简单验证。你需要解决的唯一问题是选择下一个更高的一个。