[Java]#从头学Java# Java大整数相加
2020-11-27 07:25
标签:style blog class code java javascript 重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识。算法、效率什么的都没怎么考虑,就纯粹实现功能而已。 先上代码:
代码个人觉得还算清晰,BigNumSum方法使用不定长参数以便于进行多个大整数相加,真正计算全在Add里面。有问题请不吝指教。 我写了个随机数字(不大的整数)测试,大概测了下没有异常: 结果示例: 分割线以上是正文,下面是胡谝了。 #2014-05-01
一个人静静思考#2012年7月毕业,和多数人一样,去了大城市——北京,做了半年的Delphi“开发”,那段时间忙碌但还算可以,因为毕竟是人生中第一份工作,自己能赚一点生活费了。但是这样的状态保持了没多久,年底离开后回到西安,做了一份与“软件工程”专业毫无关系的工作,如果非要找点相近的那就是给公司做了个静态网站+偶尔PS改图之类的,呵呵……现在想想自己这状态,不知道有多可笑,现在又重新踏上程序猿道路。重拾开发,算是从头开始好好干。 以后每天至少学习一个小时,做一道题。 [Java]#从头学Java# Java大整数相加,搜素材,soscw.com [Java]#从头学Java# Java大整数相加 标签:style blog class code java javascript 原文地址:http://www.cnblogs.com/tacyeh/p/3703480.html 1 package com.tacyeh.common;
2
3 public class MyMath {
4
5 public static String BigNumSum(String... n) {
6 int length = n.length;
7 StringBuilder result = new StringBuilder();
8 //这里判断其实不需要,因为Add里面已经做了处理
9 /*if (length == 1) {
10 result.append(n[0]);
11 } else {
12 for (int i = 0; i 13 Add(result, n[i]);
14 }
15 }*/
16 for (int i = 0; i ) {
17 Add(result, n[i]);
18 }
19 return result.toString();
20 }
21
22 // 将数字string加至result中
23 private static void Add(StringBuilder result, String string) {
24 // 如果result为空,则不需要相加直接将string添加进去即可
25 if (result.length() == 0) {
26 result.append(string);
27 return;
28 }
29 StringBuilder s1 = new StringBuilder(result.toString());
30 StringBuilder s2 = new StringBuilder(string);
31 //逆序两个数字
32 s1.reverse();
33 s2.reverse();
34 //清空result,用以存放结果
35 result.delete(0, result.length());
36 int maxLength = s1.length() >= s2.length() ? s1.length() : s2.length();
37 // 进位标记
38 int carry = 0;
39 for (int i = 0; i ) {
40 int n1 = 0, n2 = 0;
41 if (s1.length() > i) {
42 n1 = s1.charAt(i) - ‘0‘;
43 }
44 if (s2.length() > i) {
45 n2 = s2.charAt(i) - ‘0‘;
46 }
47 //计算两数对应位之和,并加上进位上来的数字
48 int sum = n1 + n2 + carry;
49 //如果无进位,则直接将sum作为结果,有进位则取余为结果
50 if (sum ) {
51 result.append(sum);
52 } else {
53 result.append(sum % 10);
54 }
55 //存储进位下次加至sum中
56 carry = sum / 10;
57 }
58 //若两数相加最终会向最高位进位,则将进位加至结果中
59 if (carry != 0) {
60 result.append(carry);
61 }
62 //重新逆序得到相加结果
63 result.reverse();
64 }
65 }
1 package com.tacyeh.common;
2
3 public class Test {
4
5 public static void main(String[] args) {
6 int num1, num2, num3;
7 for (int i = 0; i ) {
8 num1 = (int)(Math.random()*1000000);
9 num2 = (int)(Math.random()*10000000);
10 System.out.println(String.format("参考结果: %d + %d = %d", num1, num2, num1 + num2));
11 System.out.println(String.format("计算结果: %d + %d = %s", num1, num2, MyMath.BigNumSum(num1+"", num2+"")));
12 }
13
14 for (int i = 0; i ) {
15 num1 = (int)(Math.random()*1000000);
16 num2 = (int)(Math.random()*10000000);
17 num3 = (int)(Math.random()*1000000000);
18 System.out.println(String.format("参考结果: %d + %d + %d = %d", num1, num2, num3, num1 + num2 + num3));
19 System.out.println(String.format("计算结果: %d + %d + %d = %s", num1, num2, num3, MyMath.BigNumSum(num1+"", num2+"", num3 + "")));
20 }
21 }
22 }
1 参考结果: 656405 + 9080280 = 9736685
2 计算结果: 656405 + 9080280 = 9736685
3 参考结果: 922986 + 7698921 = 8621907
4 计算结果: 922986 + 7698921 = 8621907
5 参考结果: 629313 + 7816715 = 8446028
6 计算结果: 629313 + 7816715 = 8446028
7 参考结果: 273994 + 7913142 = 8187136
8 计算结果: 273994 + 7913142 = 8187136
9 参考结果: 659146 + 3001331 = 3660477
10 计算结果: 659146 + 3001331 = 3660477
11 参考结果: 837469 + 4587465 = 5424934
12 计算结果: 837469 + 4587465 = 5424934
13 参考结果: 470568 + 6860168 = 7330736
14 计算结果: 470568 + 6860168 = 7330736
15 参考结果: 822342 + 7793830 = 8616172
16 计算结果: 822342 + 7793830 = 8616172
17 参考结果: 160316 + 8353945 = 8514261
18 计算结果: 160316 + 8353945 = 8514261
19 参考结果: 687841 + 9943578 = 10631419
20 计算结果: 687841 + 9943578 = 10631419
21 参考结果: 578712 + 7372111 = 7950823
22 计算结果: 578712 + 7372111 = 7950823
23 参考结果: 46621 + 1110969 + 233974530 = 235132120
24 计算结果: 46621 + 1110969 + 233974530 = 235132120
25 参考结果: 148252 + 6427111 + 817102144 = 823677507
26 计算结果: 148252 + 6427111 + 817102144 = 823677507
27 参考结果: 714230 + 9416781 + 372323772 = 382454783
28 计算结果: 714230 + 9416781 + 372323772 = 382454783
29 参考结果: 623342 + 137310 + 165272255 = 166032907
30 计算结果: 623342 + 137310 + 165272255 = 166032907
31 参考结果: 722800 + 3442193 + 822635821 = 826800814
32 计算结果: 722800 + 3442193 + 822635821 = 826800814
33 参考结果: 995006 + 1934487 + 311100730 = 314030223
34 计算结果: 995006 + 1934487 + 311100730 = 314030223
35 参考结果: 793812 + 4501416 + 231740793 = 237036021
36 计算结果: 793812 + 4501416 + 231740793 = 237036021
37 参考结果: 37730 + 354688 + 948028135 = 948420553
38 计算结果: 37730 + 354688 + 948028135 = 948420553
39 参考结果: 969339 + 4083304 + 595032908 = 600085551
40 计算结果: 969339 + 4083304 + 595032908 = 600085551
41 参考结果: 519930 + 5746212 + 843022611 = 849288753
42 计算结果: 519930 + 5746212 + 843022611 = 849288753
43 参考结果: 497529 + 7835996 + 351860170 = 360193695
44 计算结果: 497529 + 7835996 + 351860170 = 360193695