原创
HDOJ:http://acm.hdu.edu.cn/showproblem.php?pid=1002
长度在1000以内的两个数相加是不可能直接相加的,我用的是模拟手工相加的方法,比如:1111+11,由于n位数相加最多只能
得到n+1位,所以可以写成01111+00011,这样考虑进位会方便一些,用户输出字符串,将字符串转换成字符数组,然后逐个将字符
数组的字符数字转换成int型考虑相加,相加以后再转换成char存放,过程涉及很多字符串String、StringBuilder、char、int的
相互转换,弄得头都大,输出格式注意一下就没多大问题了,以下是自己写的Accepted代码:
1 import java.util.*; 2 3 public class HDOJ_1002 { 4 5 public static void main(String[] args) { 6 Scanner reader=new Scanner(System.in); 7 int N=reader.nextInt(); 8 String Result[]=new String[N]; //存储N个结果字符串 9 int count=0; 10 String s1[]=new String[N]; 11 String s2[]=new String[N]; 12 while(N>0) { 13 s1[count]=reader.next(); 14 s2[count]=reader.next(); 15 StringBuilder str1=new StringBuilder(s1[count]); 16 StringBuilder str2=new StringBuilder(s2[count]); 17 //首部加0 18 if(str1.length()>str2.length()) { 19 str1.insert(0,'0'); 20 int differ=str1.length()-str2.length(); 21 while(differ>0) { 22 str2.insert(0,'0'); 23 differ--; 24 } 25 } 26 else { 27 str2.insert(0,'0'); 28 int differ=str2.length()-str1.length(); 29 while(differ>0) { 30 str1.insert(0,'0'); 31 differ--; 32 } 33 } 34 String sss1=new String(str1); 35 String sss2=new String(str2); 36 char ss1[]=sss1.toCharArray(); 37 char ss2[]=sss2.toCharArray(); 38 //存储结果的字符数组的大小定义为max+1,因为两个n位数相加最多得到n+1位数字 39 int max=ss1.length; 40 char result[]=new char[max]; 41 int index_ss1=ss1.length-1; //ss1数组最后一位元素的索引 42 int index_ss2=ss2.length-1; //ss2数组最后一位元素的索引 43 int index_res=result.length-1; //结果数组索引 44 int flag=0; //进位标志 45 while( (index_ss1>=0 && index_ss2>=0) || flag==1){ 46 if( index_ss1<0 && index_ss2<0 && flag==1 ) { 47 result[index_res]='1'; 48 break; 49 } 50 int tra1=ss1[index_ss1]-'0'; 51 int tra2=ss2[index_ss2]-'0'; 52 int res_tra; 53 if(flag==1) { //后面有进位 54 res_tra=tra1+tra2+1; 55 flag=0; //勿忘 56 } 57 else { 58 res_tra=tra1+tra2; 59 } 60 if(res_tra>=10) { //有进位 61 res_tra-=10; 62 flag=1; 63 } 64 result[index_res]=(char)(res_tra+48); 65 index_ss1--; 66 index_ss2--; 67 index_res--; 68 } 69 if(result[0]=='0') { 70 String ss=new String(result); 71 StringBuilder sss=new StringBuilder(ss); 72 sss.deleteCharAt(0); 73 ss=new String(sss); 74 Result[count]=new String(ss); 75 } 76 else { 77 Result[count]=String.valueOf(result); 78 } 79 N--; 80 count++; 81 } 82 for(int i=0;i<count;i++) { 83 System.out.println("Case "+(i+1)+":"); 84 System.out.println(s1[i]+" "+"+"+" "+s2[i]+" "+"="+" "+Result[i]); 85 if(i<count-1) { 86 System.out.println(); 87 } 88 } 89 } 90 91 }
19:45:00
2018-08-16