关注
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); String num1 = input.nextLine(); String num2 = input.nextLine(); String sum = add(num1, num2); System.out.println(sum); } /* * 1234567890123456789012345678901234567890. * 1234567890123456789012345678901234567890 * 1000000000100000000010000000001000000000. * 1000000000100000000010000000001000000000 */ /* * 2234567890223456789022345678902234567890. * 223456789022345678902234567890223456789 */ private static String[] split(String str) { for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '.') { return new String[] { str.substring(0, i), str.substring(i + 1) }; } } return new String[] { str, "" }; } private static String add(String num1, String num2) { /*String[] number1 = num1.split("\\."); String[] number2 = num2.split("\\.");*/ String[] number1 = split(num1); String[] number2 = split(num2); String nums1 = number1[0]; String nums2 = number2[0]; String dot1 = number1[1]; String dot2 = number2[1]; int dlength1 = dot1.length(); int dlength2 = dot2.length(); int min; int[] dnums = new int[dlength1 > dlength2 ? dlength1 : dlength2]; if (dlength1 > dlength2) { min = dlength2; for (int i = min; i < dlength1; i++) { dnums[i] = dot1.charAt(i) - '0'; } } else { min = dlength1; for (int i = min; i < dlength2; i++) { dnums[i] = dot2.charAt(i) - '0'; } } min--; int top = 0; while (min >= 0) { int sum = (dot1.charAt(min) + dot2.charAt(min) + dnums[min] - 2 * '0'); if (sum >= 10) { dnums[min] = sum % 10; if (min != 0) { dnums[--min] = sum / 10; } else { top = sum / 10; } } else { dnums[min--] = sum; } } int[] num = new int[(nums1.length() > nums2.length() ? nums1.length() : nums2.length()) + 1]; int i = nums1.length() - 1; int j = nums2.length() - 1; int k = num.length - 1; num[k] = top; while (i >= 0 && j >= 0) { int sum = (nums1.charAt(i) + nums2.charAt(j) + num[k] - 2 * '0'); if (sum >= 10) { num[k] = sum % 10; num[--k] = sum / 10; } else { num[k--] = sum; } i--; j--; } if (i < 0 || j >= 0) { while (j >= 0) { int sum = (nums2.charAt(j) + num[k]) - '0'; if (sum >= 10) { num[k] = sum % 10; num[--k] = sum / 10; } else { num[k--] = sum; } j--; } } else if (i >= 0 || j < 0) { while (i >= 0) { int sum = (nums1.charAt(i) + num[k]) - '0'; if (sum >= 10) { num[k] = sum % 10; num[--k] = sum / 10; } else { num[k--] = sum; } i--; } } StringBuilder sb = new StringBuilder(); StringBuilder sb1 = new StringBuilder(); boolean sign = false, sign1 = false; for (int s : num) { if (s != 0) sign = true; if (sign) { sb.append(s); } } for (int h = dnums.length - 1; h >= 0; h--) { if (dnums[h] != 0) sign1 = true; if (sign1) { sb1.append(dnums[h]); if (h == 0) sb1.append("."); } } sb.append(sb1.reverse()); return sb.toString(); } } 思路是不难,代码量太大了吧!!!
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
03-25 14:32
南昌大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 后端实习什么算有产出5.0W
- 2... 25届游戏客户端开发求职总结1.4W
- 3... 广州25应届计算机 Java想转行1.0W
- 4... 双一流本的春招结束 去送外卖了7878
- 5... 太顺利的话,好像总是有意外……7408
- 6... 悟已往之不谏,知来者之可追6028
- 7... 回望春招路~草草用如履薄冰带过5980
- 8... 差不多还有一周就要去团子实习了,部门自我感觉不是很核心,但是现在比较焦虑。清楚自己是一个八股选手,项目经验几乎是0,比较依赖ai,外卖点评什么的都没敲过,自己的学习能力应该算中等?很害怕进去之后比较push,然后发现我是个水货把我提前开除了,想问问这段时间可以做些什么准备呢?速通一下外卖项目跟着看一遍视频?(有点担心跟着敲一遍时间不够)?5908
- 9... 腾讯云智一面面经5728
- 10... 实习生都给我放开了大胆问5326
正在热议
更多
# 我的求职总结 #
9357次浏览 173人参与
# 辞职之后最想做的一件事 #
7823次浏览 84人参与
# 毕业季,给职场新人一些建议 #
8056次浏览 163人参与
# 选offer应该考虑哪些因素 #
8431次浏览 121人参与
# 我的实习日记 #
2413096次浏览 25245人参与
# 工作后会跟朋友渐行渐远吗 #
20289次浏览 156人参与
# 你小时候最想从事什么职业 #
89807次浏览 1681人参与
# 你想留在一线还是回老家? #
35819次浏览 434人参与
# 设计人如何选offer #
107945次浏览 706人参与
# 生物制药/化工校招攻略 #
42584次浏览 282人参与
# 毕业后不工作的日子里我在做什么 #
167398次浏览 1480人参与
# 比亚迪求职进展汇总 #
703014次浏览 3058人参与
# 你们公司哪个部门最累? #
14041次浏览 118人参与
# 薪资爆料 #
101654次浏览 1036人参与
# 秋招想进国企该如何准备 #
56583次浏览 363人参与
# 招聘要求与实际实习内容不符怎么办 #
98101次浏览 717人参与
# 大学最后一个寒假,我想…… #
35340次浏览 452人参与
# 你们的毕业论文什么进度了 #
1012413次浏览 9494人参与
# 工作中的卑微时刻 #
8744次浏览 54人参与
# 市场营销面经 #
40855次浏览 298人参与