我正在努力解决挑战。这是我能够做到的,但我还没有能够获得100%的工作代码
我做错了吗?
问题:
问题如下:选择一个数字,反转其数字并添加 它到原来的。如果总和不是回文(这意味着,它是 从左到右,从右到左不是相同的数字),重复一遍 过程
import java.io.*;
public class Reverse_and_add {
public static void main (String[] args) throws IOException {
File file = new File("addition.txt");
BufferedReader buffer = new BufferedReader(new FileReader(file));
String line;
while ((line = buffer.readLine()) != null) {
line = line.trim();
String[] addition = line.split(" ");
int[] myAddition = new int[addition.length];
int convert = 0;
for (int i = 0; i < myAddition.length; i++) {
myAddition[i] = Integer.parseInt(addition[i]);
convert = myAddition[i];
}
int result=0;
int count =0;
result = convert + reverse(convert);
do {
result = result + reverse(result);
System.out.println(count+" "+result);
count++;
} while (result != reverse(result));
}
}
public static int reverse(int n){
int reverse = 0;
while( n != 0 )
{
reverse = reverse * 10;
reverse = reverse + n%10;
n = n/10;
}
return reverse;
}
}
答案 0 :(得分:1)
要完成此问题,您必须将其分解。有三个部分,反转它,检查它是否是回文,并添加到完成。我几乎解决了这个问题,然后在下面的代码中实现了它。请注意:方法isPalindrome()
和reverseInt()
的实现取自其他SO线程。 但是,您实现了解决问题的价值取决于您。
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = 54; //THis can be whatever you want
while(!isPalindrome(Integer.toString(num))){
int n = reverseInt(num);
num +=n;
}
System.out.println(num);
}
//Checks if a number is a string is a palindrome
public static boolean isPalindrome(String str) {
return str.equals(new StringBuilder(str).reverse().toString());
}
//Takes an int, reverses it
public static int reverseInt(int input)
{
long reversedNum = 0;
long input_long = input;
while (input_long != 0)
{
reversedNum = reversedNum * 10 + input_long % 10;
input_long = input_long / 10;
}
if (reversedNum > Integer.MAX_VALUE || reversedNum < Integer.MIN_VALUE)
{
throw new IllegalArgumentException();
}
return (int)reversedNum;
}
}
答案 1 :(得分:0)
这个问题就在这里:
result = convert + reverse(convert);
do {
result = result + reverse(result);
//
}
它将反转该数字并连续两次添加,而不检查。例如,如果您的数字是7,那么do..while
之前的行将使结果等于14,而do..while
中的第一行将使其等于55.这是无意的,因为14显然是不是回文,这意味着程序应该停止,而是完全跳过它。