关注
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(); } } 思路是不难,代码量太大了吧!!!
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
![](https://static.nowcoder.com/fe/file/oss/1716965564844UEBJN.png)
![](https://static.nowcoder.com/fe/file/oss/1716965585666UBBME.png)
点点互动
| 校招
| 9个岗位
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 小厂实习有必要去吗 #
31016次浏览 214人参与
# 我的工作日记 #
52367次浏览 751人参与
# 国企和大厂硬件兄弟怎么选? #
112664次浏览 1637人参与
# 影石Insta360求职进展汇总 #
107107次浏览 960人参与
# 文科生还参加今年的春招吗 #
2833次浏览 24人参与
# 选择和努力,哪个更重要? #
40268次浏览 459人参与
# 如果再来一次,你还会学硬件吗 #
102220次浏览 1229人参与
# 中核求职进展汇总 #
13054次浏览 123人参与
# 我的国央企投递进展 #
35734次浏览 242人参与
# 如果公司降薪,你会跳槽吗? #
43893次浏览 343人参与
# 一人推荐一个值得去的通信/硬件公司 #
160832次浏览 1734人参与
# 长光卫星求职进展汇总 #
27342次浏览 180人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
68188次浏览 492人参与
# 机械人选offer,最看重什么? #
68418次浏览 431人参与
# 大疆的机械笔试比去年难吗 #
63976次浏览 576人参与
# 大疆今年的机械笔试难吗? #
35170次浏览 407人参与
# 你的秋招简历被谁挂了? #
216106次浏览 2403人参与
# 考公VS就业,你怎么选? #
51528次浏览 369人参与
# 秋招盘点:机械人值得去的企业 #
60883次浏览 630人参与
# 24届市场营销薪资爆料 #
9348次浏览 62人参与