java怎么实现字符串倒叙_415. 字符串相加

本文介绍了如何使用C/C++、Java和Python实现两种字符串形式的非负整数加法,通过模拟十进制加法过程解决大数相加问题,适用于长度小于5100的整数。提供了详细的代码示例和Debug结果,适合学习算法和数值计算技巧。
摘要由CSDN通过智能技术生成

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

题解:

1.计算两个字符串形式的和

2.整数为非负形式

3.整数长度小于 5100

提示:

  • num1 和num2 的长度都小于 5100

  • num1 和num2 都只包含数字 0-9

  • num1 和num2 都不包含任何前导零

  • 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式

解题思路:

  • 整数长度够长,大数相加模拟十进制加法过程,一个位置上相加满十进一,对十取余为结果数,取整得到的数作为进位模拟加法过程

C/C++题解:

class Solution {

public:

    string addStrings(string num1, string num2) {

        string ans;

        int carry = 0;//进位

        int i=num1.size()-1, j=num2.size()-1;

        while(i>=0 || j>=0 || carry!=0){

            //数字没计算完或者有进位仍进行运算

            if(i>=0){carry += num1[i]-'0';

                i -= 1;}//从个位模拟

            if(j>=0){

                carry += num2[j]-'0';

                j -= 1;}

            ans += to_string(carry%10);//满十进一

            carry = carry/10;}//进位

        reverse(ans.begin(), ans.end());

        return ans;

    //     string ans;

    //     int na[5100]={0},nb[5100]={0};

    //     int la=num1.size();

    //     int lb=num2.size();

    //     // 倒叙存储

    //     for(int i=0;i

    //         na[la-1-i]=num1[i]-'0';

    //     // 倒叙存储

    //     for(int i=0;i

    //         nb[lb-1-i]=num2[i]-'0';

    //     int lmax=la>lb?la:lb;

    //     // 从个位开始计算

    //     for(int i=0;i{

    //         na[i]+=nb[i];

    //         na[i+1]+=na[i]/10;

    //         na[i]%=10;}

    //     // 去除前置0

    //     if(!na[lmax]) 

    //         lmax--;  

    //     for(int i=lmax;i>=0;i--) 

    //         ans+=na[i]+'0';

    //    return ans;

}};

Debug结果:

2afa0882616d51ea5d7a0c51ef07130a.png

Java题解:

class Solution {

    public String addStrings(String num1, String num2) {

        StringBuilder ans= new StringBuilder();

        int carry = 0;//进位

        int i=num1.length()-1, j=num2.length()-1;

        while(i>=0 || j>=0 || carry!=0){

            //数字没计算完或者有进位仍进行运算

            if(i>=0){

                carry += num1.charAt(i)-'0';

                i -= 1; }//从个位模拟

            if(j>=0){

                carry += num2.charAt(j)-'0';

                j -= 1; }

            ans.append(carry%10);//满十进一

            carry = carry/10;}//进位

        return ans.reverse().toString();}}

Debug结果:

2afa0882616d51ea5d7a0c51ef07130a.png

Python题解:

class Solution(object):

    def addStrings(self, num1, num2):

        """:type num1: str:type num2: str

        :rtype: str"""

        ans = ''

        carry = 0 #进位

        i, j=len(num1)-1, len(num2)-1

        while i>=0 or j>=0 or carry!=0:

            #数字没计算完或者有进位仍进行运算

            if i>=0:

                carry += int(num1[i])

                i -= 1 #从个位模拟

            if j>=0:

                carry += int(num2[j])

                j -= 1

            ans += str(carry%10) #满十进一

            carry = carry/10 #进位

        return ans[::-1]

Debug结果:

ad41e5b5f9f3f5589d7c0f2086185950.png

例题来自力扣网https://leetcode-cn.com/

欢迎评论后台留言交流~

48dda65d8f21317e4867a6ef6c058271.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值