Golang 【大字符串相加,求和】

题目

Golang  【大字符串相加,求和】

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

题目示例

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"


示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

解题思路

分别解析两个字符串、并获取从末尾获取个位数,并进行相加、需要注意的是两个字符串可能存在长度不一致的情况,需要做兼容处理。

核心的思路:

  • 两数相加之后用该数、取个位数用:  %10   如果进一之后则要加上
  • 两数相加之后用该数,看是否进一:  /10

核心代码:

add该属性,则在最外层,用来标识是否需要进一

//两个字符串个位数相加
result := x + y + add
//取个数字之后、并拼接新的字符串
ans=strconv.Itoa(result%10)+ans
//看是否需要进一
add=result/10

第一种实现-Golang


func TestStrSum(t *testing.T){
	fmt.Printf("sum: %v \n",sum("191","121"))
	fmt.Printf("sum: %v \n",sum("10","100"))
}
//大字符串相加
func sum(str1,str2 string) string {
	//获取两个字符串的长度
	str2Count:=len(str2)
	str1Count:=len(str1)
	//如果个位相加、超过十,则进一
	add := 0
	//最后拼接的字符串
	ans := ""
	//倒序从两个字符串末尾开始相加、可能存在两个字符串长度不相等,故用或
	for( str1Count>0 || str2Count>0){
		x:=0
		//防止下标越界
		if(str1Count>0){
			x=int(str1[str1Count-1]-'0')
		}
		y:=0
		//防止下标越界
		if(str2Count>0){
			y=int(str2[str2Count-1]-'0')
		}
		//两个字符串个位数相加
		result := x + y + add
		//取个数字之后、并拼接新的字符串
		ans=strconv.Itoa(result%10)+ans
		//看是否需要进一
		add=result/10
		//len --
		str1Count--
		str2Count--
	}
	//输出字符串
	return ans
}

第二种实现-Java

注意:java默认两个字符串长度一样

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;

public class StringSum {
    public static void main(String[] args) {
        System.out.println("sum:"+new StringSum().sum(new ArrayList<String>(Arrays.asList("191","121"))));
        System.out.println("sum2:"+sum2("191","121"));
    }

    public  String sum (ArrayList<String> strings) {
        BigInteger bgSum = new BigInteger("0");
        for(String str : strings){
            bgSum = bgSum.add(new BigInteger(str));
        }
        return bgSum.toString();
    }
    public static String sum2(String a,String b){
        a= new StringBuilder(a).reverse().toString();
        b= new StringBuilder(b).reverse().toString();
        int alen=a.length();
        int add=0;
        StringBuffer sb=new StringBuffer();
        for (int i = 0; i < alen; i++) {
            char x = a.charAt(i);
            char y = b.charAt(i);

            int result = x - '0' + y - '0' + add;
            //个位数
            int r1 = result % 10;
            //进一
            add = result / 10;
            sb.append(r1);
        }
        return sb.reverse().toString();
    }
}

结果验证

Java结果验证:

Golang结果验证: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘都都

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值