PAT乙级1079 延迟的回文数

匿名 (未验证) 提交于 2019-12-03 00:03:02

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;     } } 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!