两个 大数求和

1|0分析如下:


大数加法
用BigInteger是投机取巧的做法,面试时这么干会被面试官喷。这题考察的是大数计算器的思想,类似的题还有lc 2(链表两数相加)。只需要想象一下我们在做加法时,都做了什么事情,其实只有两种情况:需要进位和不需要进位。所谓进位,无非是当前位相加大于等于10的话,就在下一位加1。那么我们就可以用一个变量carry来表示是否有进位,有进位为1,无进位为0,于是在每一位计算时,所做的计算就是三个变量相加:

结果的此位 = 第一个数的此位 + 第二个数的此位 + carry;

//代码如下: import java.util.*; class Main{ public static void main(String[] args) { Solution solution=new Solution(); System.out.println(solution.solve("4000","321")); } } public class Solution { /** * 计算两个数之和 * @param s string字符串 表示第一个整数 * @param t string字符串 表示第二个整数 */ public String solve (String s, String t) { String longer=s,shorter=t; if(s.length()<t.length()){ longer=t; shorter=s; } StringBuilder res=new StringBuilder(); int i,j; int carry=0; for(i=shorter.length()-1,j=longer.length()-1;i>=0;i--,j--){ int a=shorter.charAt(i)-'0'; int b=longer.charAt(j)-'0'; int cur=a+b+carry; if(cur>=10){ cur%=10; carry=1; }else{ carry=0; } res.insert(0,cur); } for(int x=j;j>=0;j--){ int b=longer.charAt(j)-'0'; int cur=b+carry; if(cur>=10){ cur%=10; carry=1; }else{ carry=0; } res.insert(0,cur); } if(carry!=0){ res.insert(0,carry); } return res.toString(); } }

运行结果如下:

2|0如果是链表的两个大数之和


/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode preHead=new ListNode(-1); ListNode cur=preHead; int up=0; while(l1!=null || l2!=null || up!=0){//还有进位的时候还要继续进行循环 int ans1=(l1!=null)?l1.val:0; int ans2=(l2!=null)?l2.val:0; if(l1!=null) l1=l1.next; if(l2!=null) l2=l2.next; int rest=(ans1+ans2+up)%10;//这里要加上up这个进位 cur.next=new ListNode(rest);//不断地建立新的结点来存储好计算好的值 cur=cur.next; up=(ans1+ans2+up)/10;//这里也要加上up这个进位 } return preHead.next; } }

__EOF__

本文作者ArtiaDeng
本文链接https://www.cnblogs.com/ArtiaDeng-blog/p/16169634.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ArtiaDeng  阅读(180)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示