原创
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
来源:oschina
链接:https://my.oschina.net/u/4307784/blog/3862747