PAT乙级1079 延迟的回文数
题解:对给定的一个字符串,判断其与其逆序字符串相加是否得到回文数,输出每一步相加的结果,超过10步即停止判断,输出“Not found in 10 iterations.”,10步以内如果得到回文数,就输出“? is a palindromic number.”,(这里指出0和个位数本身就是回文数,无需判断输出即可)
核心:由于这个正整数不超过1000位,不能用普通的转换为integer 或者long类型了,因为这个数已经超过了long类型的数据范围,所以这里用字符串实现大整数相加,由于是相加的两个数位数相同,加起来还算是比较简单的,如果位数不同的话,这个考虑的情况就多了。(如果要实现不同位数的大整数相加,请看https://blog.csdn.net/CSDN_Lrcx/article/details/100143856,里面有详细说明,认真看的话肯定有收获)
package lowlevel;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
大整数相加
*/
public class I079 {
public static void main(String[] args)throws Exception {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String A=br.readLine();
br.close();
int count=0;//记录计算回文数的次数,超过10就结束
I079 pat=new I079();
// System.out.println(pat.sum(A));
while (!pat.palin(A)&&count<10){//如果相加得到的这个数是回文数,或者超过10步,就退出循环
String str="";
char[] c=A.toCharArray();
for(int i=c.length-1;i>=0;i--){
str+=c[i];
}
String B=A; //记录之前A的数据,方便输出
A=pat.sum(A);
count++;
System.out.println(B+" + "+str+" = "+A);
}
if(count==10){
System.out.println("Not found in 10 iterations.");
}else{
System.out.println(A+" is a palindromic number.");
}
}
//判断一个数是不是回文数的方法
public Boolean palin(String num){
char[] c=num.toCharArray();
Boolean flag=true;
for(int i=0;i<c.length;i++){
if(c[i]!=c[c.length-i-1]){
flag=false;
break;
}
}
if(flag==true){
return true;
}else{
return false;
}
}
//两个字符串正数相加的方法,这是核心
public String sum(String a){
char[] c=a.toCharArray();
String str="";
int carry=0;
for(int i=c.length-1;i>=0;i--){
int result=c[i]+c[c.length-i-1]-48-48+carry;
if(result>=10){
result=result-10;
carry=1;
}else{
carry=0;
}
str+=result;
}
if(carry==1){
str=str+1;
}
c=str.toCharArray();
str="";
for(int i=c.length-1;i>=0;i--){
str+=c[i];
}
return str;
}
}
614

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



