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; } }
来源:51CTO
作者:团子和二花
链接:https://blog.csdn.net/CSDN_Lrcx/article/details/100782072