首页 > 试题广场 >

字符串相加

[编程题]字符串相加
  • 热度指数:517 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:
/**
@param a = "1101"
@param b = "1100"
@return "11001"
*/
public String add(String a, String b){
 }

示例1

输入

"1101","1100"

输出

"11001"
class Solution {
public:
    /**
     * 字符串相加
     * @param str1 string字符串 第一个二进制数
     * @param str2 string字符串 第二个二进制数
     * @return string字符串
      
     */  
    string solve(string str1, string str2) {
        // write code here
        
        // 9999 
        //  111
        // 10110
        
       //思路  遍历  大家都知道 
        
        //细节:长度不等 和最后进位该怎么办?
       //space 
        
        string data;
        int bit =0;
       
        
        for(int i=str1.size()-1, j =str2.size()-1; i >=0 || j >=0 || bit >0;i--,j-- )
        {
           int first = i<str1.size()?str1[i]-'0':0;
           int second = j<str2.size()?str2[j]-'0':0;
           int sum = first+second+bit;
            //加法计算方法以二进制方式计算
           bit =sum/2;
            
          data.push_back(sum%2+'0');
             
        }
        
        
       reverse(data.begin(), data.end());
        
       
       return data;
        
        
    }
};
发表于 2021-07-28 18:21:40 回复(0)
class Solution {
public:
    /**
     * 字符串相加
     * @param str1 string字符串 第一个二进制数
     * @param str2 string字符串 第二个二进制数
     * @return string字符串
     */
    string solve(string str1, string str2) {
        // write code here
        string res = "";
        int i = str1.size() - 1, j = str2.size() - 1, carry = 0;
        while (i >= 0 || j >= 0) {
            int num1 = i >= 0 ? str1[i--] - '0' : 0;
            int num2 = j >= 0 ? str2[j--] - '0' : 0;
            int sum = num1 + num2 + carry;
            res.insert(res.begin(), sum >= 2 ? 0 + '0' : sum + '0');
            carry = sum >= 2 ? 1 : 0;

        }
        return carry ? "1" + res : res;
    }
};
发表于 2020-08-14 11:06:49 回复(0)
class Solution {
public:
    /**
     * 字符串相加
     * @param str1 string字符串 第一个二进制数
     * @param str2 string字符串 第二个二进制数
     * @return string字符串
     */
    string solve(string str1, string str2) {
        // write code here
        string temp;
        while(str1.length()!=str2.length())
        {
            if(str1.length()<str2.length())
                str1 = '0'+str1;
            else if(str1.length()>str2.length())
                str2 = '0'+str2;
                
        }
        int flag=0;
        temp = str1;
        for(int i=0;i<str1.length();i++)
        {
            if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==2)
            {
                flag = 1;
                temp[str1.length()-i-1] = '0';
            }
            else if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==1)
            {
                flag = 0;
                temp[str1.length()-i-1] = '1';
            }
            else if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==0)
            {
                flag = 0;
                temp[str1.length()-i-1] = '0';
            }
        }
        if(flag==1)
        {
            temp = '1'+temp;
        }
        return temp;
    }
};

发表于 2020-08-10 21:03:47 回复(0)

问题信息

上传者:牛客332641号
难度:
3条回答 3933浏览

热门推荐

通过挑战的用户