题目:
"回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
一个数字,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。如果在30步以外(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。详细描述:
在caculateHuiWenShu函数中实现该功能:/* 功能: * 输入:int 一个小于的进制数 * 输出:把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止,并输出次数,如果次计算不能得到回文数,则输出。 * 返回: 例如:进制则有: STEP1: 87+78=165 STEP2: 165+561=726 STEP3: 726+627=1353 STEP4: 1353+3531=4884 则输出 4 */输入一个0<=m的非回文数,输出为计算的步数 异常情况返回0
输入样例:
78
返回值样例:
4
public static long caculateHuiWenShu(int input)
{
if(input<0)
{
return (long)0;
}
StringBuffer sb=new StringBuffer();
sb.append(input);
long result=0;
for(long i=0;i<30;i++){
result=(Long.valueOf(sb.toString())+Long.valueOf(sb.reverse().toString()));
sb.setLength(0);
sb.append(result);
if(result==Long.valueOf(sb.reverse().toString())){
return (long)(i+1);
}
sb.setLength(0);
sb.append(result);
}
return (long)0;
}
题目和我的代码如上。但是测试案例没有完全通过,因为看不到测试案例,自己也找不到错误,希望有人帮忙解答一下,谢谢。
"回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
一个数字,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。如果在30步以外(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。详细描述:
在caculateHuiWenShu函数中实现该功能:/* 功能: * 输入:int 一个小于的进制数 * 输出:把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止,并输出次数,如果次计算不能得到回文数,则输出。 * 返回: 例如:进制则有: STEP1: 87+78=165 STEP2: 165+561=726 STEP3: 726+627=1353 STEP4: 1353+3531=4884 则输出 4 */输入一个0<=m的非回文数,输出为计算的步数 异常情况返回0
输入样例:
78
返回值样例:
4
public static long caculateHuiWenShu(int input)
{
if(input<0)
{
return (long)0;
}
StringBuffer sb=new StringBuffer();
sb.append(input);
long result=0;
for(long i=0;i<30;i++){
result=(Long.valueOf(sb.toString())+Long.valueOf(sb.reverse().toString()));
sb.setLength(0);
sb.append(result);
if(result==Long.valueOf(sb.reverse().toString())){
return (long)(i+1);
}
sb.setLength(0);
sb.append(result);
}
return (long)0;
}
题目和我的代码如上。但是测试案例没有完全通过,因为看不到测试案例,自己也找不到错误,希望有人帮忙解答一下,谢谢。
/*
* 题目:
"回文数"是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。
一个数字,把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,
如果不是,则重复这个操作,直到和为回文数为止。如果在30步以外(含30步)不可能得到回文数,则输出0。输入的数保证不为回文数。详细描述:
在caculateHuiWenShu函数中实现该功能:功能:
* 输入:int 一个小于的进制数
* 输出:把它的各位数字上数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,
* 如果不是,则重复这个操作,直到和为回文数为止,并输出次数,如果次计算不能得到回文数,则输出。
* 返回:
例如:进制则有:
STEP1: 87+78=165
STEP2: 165+561=726
STEP3: 726+627=1353
STEP4: 1353+3531=4884
则输出 4
输入一个0<=m的非回文数,输出为计算的步数 异常情况返回0
输入样例:
78
返回值样例:
4
*/public class Test1 {
public static void main(String[] args) {
long value = calcPlalindrome(78);
System.out.println(value);
} static int calcPlalindrome(int num) {
final int err = 0;// 异常返回值
final int MAX_STEP = 30;// 最大步数
if (num < 0 || isPlalindrome(num)) {
return err;
}
for (int i = 1; i <= MAX_STEP; ++i) {
int reverseNum = getReverseNum(num);
System.out.printf("STEP%d: %d+%d=%d\n", i, num, reverseNum, num
+ reverseNum);
num += reverseNum;
if (isPlalindrome(num))
return i;
}
return 0;
} /*
* 把一个数的各位数字上数字倒过来排列组成一个新数
*/
static int getReverseNum(int num) {
int newNum = 0;
while (num > 0) {
int n = num % 10;
newNum *= 10;
newNum += n;
num /= 10;
}
return newNum;
} /*
* 判断是否为回文数
*/
static boolean isPlalindrome(int num) {
return num == getReverseNum(num);
}
}
重新贴下代码public class Test1 {
public static void main(String[] args) {
long value = calcPlalindrome(78);
System.out.println(value);
} static int calcPlalindrome(int num) {
final int err = 0;// 异常返回值
final int MAX_STEP = 30;// 最大步数
if (num < 0 || isPlalindrome(num)) {
return err;
}
for (int i = 1; i <= MAX_STEP; ++i) {
int reverseNum = getReverseNum(num);
System.out.printf("STEP%d: %d+%d=%d\n", i, num, reverseNum, num
+ reverseNum);
num += reverseNum;
if (isPlalindrome(num))
return i;
}
return 0;
} //把一个数的各位数字上数字倒过来排列组成一个新数
static int getReverseNum(int num) {
int newNum = 0;
while (num > 0) {
int n = num % 10;
newNum *= 10;
newNum += n;
num /= 10;
}
return newNum;
} //判断是否为回文数
static boolean isPlalindrome(int num) {
return num == getReverseNum(num);
}
}
public class ReverseNum
{ private static int times = 0; public static void processNum(int num)
{
if (num < 0)
{
System.out.println("请输入非负整数。");
return;
}
BigDecimal bd = new BigDecimal(num);
StringBuilder sb = new StringBuilder(5);
StringBuilder bs = new StringBuilder(5); while (times++ <= 30)
{
sb.append(bd);
bs.append(bd).reverse();
if (sb.toString().equals(bs.toString()))
{
System.out.println("经过" + (times - 1) + "次操作,得到回文数:" + sb);
return;
} bd = bd.add(new BigDecimal(bs.toString()));
System.out.println("Step " + times + ":" + sb + " + " + bs + " = " + bd);
sb.setLength(0);
bs.setLength(0);
} System.out.println("超过三次,没能找到回文数。。");
} public static void main(String[] args)
{
int num = 0;
System.out.print("请输入非负整数:");
Scanner sc = new Scanner(System.in);
try
{
num = Integer.valueOf(sc.next());
}
catch (Exception e)
{
System.out.println("输入的数字不合法!");
} processNum(num);
}
}