acm刷题第二天

题目来源:https://leetcode-cn.com/problems/add-two-numbers/

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

这里用Java解决

基本思路:
1、链表式整数构建:用“%”和“/”从int型转成链表表型
2、2个链表各从头(个位)开始,逐项相加

代码实现(这里2个加数位数必须相同):

package array_int;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
public class TextClass {
public static void main(String[] args)
{
int number=0;
Scanner reader = new Scanner(System.in);
number = reader.nextInt();
LinkedList n1=new LinkedList();
while(number!=0)
{
int temp=number%10;
String s = temp+"";
n1.add(new BigInteger(s));
number/=10;
}
number = reader.nextInt();
LinkedList n2=new LinkedList();
while(number!=0)
{
int temp=number%10;
n2.add(new BigInteger(temp+""));
number/=10;
}
Plus plus = new Plus();
LinkedList n3=new LinkedList();
n3=plus.add(n1, n2);
Iterator iter1= n1.iterator();
Iterator iter2= n2.iterator();
Iterator iter3= n3.iterator();
while(iter1.hasNext())
System.out.print(iter1.next().intValue());
System.out.println();
while(iter2.hasNext())
System.out.print(iter2.next().intValue());
System.out.println();
while(iter3.hasNext())
System.out.print(iter3.next().intValue());
}
}

package array_int;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.LinkedList;
public class Plus {
LinkedList add(LinkedList n1,LinkedList n2)
{
LinkedList n3=new LinkedList();
Iterator iter1= n1.iterator();
Iterator iter2= n2.iterator();
int carry=0;//上一位的进位
while(iter1.hasNext() && iter2.hasNext())
{
BigInteger int1= iter1.next();
BigInteger int2= iter2.next();
int newint=int1.intValue()+int2.intValue()+carry;
if (newint>=10)
{
n3.add(new BigInteger(newint-10+""));
carry=1;
}
else
{
n3.add(new BigInteger(newint+""));
carry=0;
}
}
if(!iter1.hasNext())//如果是数组2在之前的运算中完结
{
while(iter1.hasNext())
{
BigInteger int1= iter1.next();
int newint=int1.intValue()+carry;
n3.add(new BigInteger(newint+carry+""));
if (newint>=10)
{
n3.add(new BigInteger(newint-10+""));
carry=1;
}
else
{
n3.add(new BigInteger(newint+""));
carry=0;
}
}
if(carry == 1 )
{
n3.add(new BigInteger(“1”));
}
}
else//如果是数组1在之前的运算中完结
{
while(iter2.hasNext())
{
BigInteger int2= iter2.next();
int newint=int2.intValue()+carry;
n3.add(new BigInteger(newint+carry+""));
if (newint>=10)
{
n3.add(new BigInteger(newint-10+""));
carry=1;
}
else
{
n3.add(new BigInteger(newint+""));
carry=0;
}
}
if(carry==1)
{
n3.add(new BigInteger(“1”));
}
}
return n3;
}
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值