NC1 大数加法(四种语言+视频讲解)

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=188&&tqId=38569&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

- 题目描述:
图片说明
- 题目链接:
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475?tpId=188&&tqId=38569&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking

- 设计思想:

-视频讲解链接B站视频讲解
- 复杂度分析:
图片说明
- 代码:
c++版本:

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        int len_i = s.size()- 1;
        int len_j = t.size() -1;
        if(len_i < len_j) swap(s,t),swap(len_i,len_j);//如果字符串s的长度比字符串t的长度小就交换
        int temp = 0;//用来就当前这一位的加和
        int carry = 0;//保存进位
        int c = len_i - len_j;
        while(c > 0){
            t = '0' + t;
            c --;
        }
        for(int i = len_i;i >= 0;i --){
            temp = s[i] - '0' + t[i] - '0' + carry;
            if(temp >= 10){
                temp -= 10;
                carry = 1;
            }else{
                carry = 0;
            }
            s[i] = temp + '0';
        }
        //99 + 1
        if(carry == 1){
            s = '1' + s;
        }
        return s;

    }
};

Java版本:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    public String solve (String s, String t) {
        // write code here
        int len_i = s.length()- 1;
        int len_j = t.length() -1;
        if(len_i < len_j) {
            //如果字符串s的长度比字符串t的长度小就交换
            String temp1 = s;
            s = t;
            t = temp1;
            int temp = len_i;
            len_i = len_j;
            len_j = temp;
        }
        int temp = 0;//用来就当前这一位的加和
        int carry = 0;//保存进位
        int c = len_i - len_j;
        StringBuffer a = new StringBuffer(s);
        StringBuffer b = new StringBuffer(t);
        while(c > 0){
            b.insert(0,"0");
            c --;
        }
        for(int i = len_i;i >= 0;i --){
            temp = a.charAt(i) - '0' + b.charAt(i) - '0' + carry;
            if(temp >= 10){
                temp -= 10;
                carry = 1;
            }else{
                carry = 0;
            }
            char ss = (char)(temp + '0');
            a.setCharAt(i,ss);
        }
        if(carry == 1){
           a.insert(0,"1");
        }
        return a.toString();

    }
}

Python版本:

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 计算两个数之和
# @param s string字符串 表示第一个整数
# @param t string字符串 表示第二个整数
# @return string字符串
#
class Solution:
    def solve(self , s , t ):
        maxlen = max(len(s),len(t))
        s = s.zfill(maxlen)
        t = t.zfill(maxlen)
        res = ''
        carry = 0
        for i in range(-1, -maxlen-1,-1):
            temp = ord(s[i]) + ord(t[i]) -96 + carry
            if temp >= 10:#如果temp的值超过9则有进位
                temp -= 10
                carry = 1
            else:
                carry = 0
            res += str(temp)#当前这位做完加法后的值
        if carry:
            #99 + 1 = 100 发生了进位,所以最后得特判一下是否有类似这样的进位
            res += str(1)
        return res[::-1]

JavaScript版本:

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
function solve( s ,  t ) {
    // write code here
        let len_i = s.length - 1;
        let len_j = t.length -1;
        if(len_i < len_j){
            //如果字符串s的长度比字符串t的长度小就交换
            let temp1 = s;
            s = t;
            t = temp1;

            let temp = len_i;
            len_i = len_j;
            len_j = temp;
        }
        let temp = 0;///用来就当前这一位的加和
        let carry = 0;///保存进位
        let c = len_i - len_j;///用来给短的那一字符串添加前导“0”
        while(c > 0){
            t = '0' + t;
            c --;
        }
        let sum = "";
        for(let i = len_i;i >= 0;i --){///倒着开始进行进位运算
            temp = parseInt(s[i]) + parseInt(t[i]) + carry;
            if(temp >= 10){///如果temp的值超过9则有进位
                temp -= 10;
                carry = 1;
            }else{
                carry = 0;
            }
            sum = String.fromCharCode(temp + 48) + sum;
            //s[i] = String.fromCharCode(temp + 48);///当前这位做完加法后的值
        }

        if(carry == 1){
            ///d
            sum  = "1" + sum ;
        }
        return sum;
}
module.exports = {
    solve : solve
};
牛客题霸 文章被收录于专栏

本专栏主要是牛客题霸习题的讲解,有详细的考点分类,大家可以可以看看呦!!!

全部评论

相关推荐

one_t:硕还是本?什么岗
点赞 评论 收藏
分享
10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
8 1 评论
分享
牛客网
牛客企业服务