二进制相加

a,b 为二进制位串

d:下一进位

c:当前进位

x:和的当前位

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
    string a = "101";
    string b = "11111";
    string s;
    stringstream ss;
    int x, c, d;
    c = 0;
    while (a.size() > b.size())
        b = "0" + b;
    while (a.size() < b.size())
        a = "0" + a;
    cout << a << endl;
    cout << b << endl;
    for (int i = a.size() - 1; i >= 0; i--){
        d = ((a[i] - ‘0‘) + (b[i] - ‘0‘) + c ) / 2;
        x = (a[i] - ‘0‘) + (b[i] - ‘0‘) + c - 2 * d;
        ss << x;
        c = d;
    }
    ss << c;
    ss >> s;
    for (int i = s.size() - 1; i >= 0; i--)
        cout << s[i];
    return 0;
}
时间: 2024-10-08 10:44:58

二进制相加的相关文章

LeetCode OJ:Add Binary(二进制相加)

Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 简单的二进制相加而已,只不过传入的参数是字符串而已.为了方便,先将string  reverse了一下,代码如下: 1 class Solution { 2 public: 3 string addBinary(string a, s

LeetCode 67. Add Binary (二进制相加)

Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 题目标签:Math 题目给了我们两个string a 和 b,让我们把这两个二进制 相加. 首先把两个string 的长度得到,然后从右向左 取 两个string 的 digit. 增设一个 carry = 0: 每一轮把 digit

LeetCode 67 Add Binary(二进制相加)(*)

翻译 给定两个二进制字符串,返回它们的和(也是二进制字符串). 比如, a = "11" b = "1" 返回 "100". 原文 Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 分析 我一開始写了这个算法,尽管实现

Leetcode:Add Binary 二进制相加

Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 思路同十进制的大数相加.代码如下: class Solution { public: string addBinary(string a, string b) { size_t len_a = a.length(); size_

两个二进制相加

伪代码: for i=n-1 downto 0 if A[i]+B[i]==0 //情况1 if flag==0 C[i+1]=0 else C[i+1]=1 flag=0 elseif A[i]+B[i]==1 //情况2 if flag==0 C[i+1]=1 else C[i+1]=0 flag==1 else //情况3 if flag==0 C[i+1]=0 else C[i+1]=1 flag==1C[0]=flag

LeetCode Add Binary 两个二进制数相加

1 class Solution { 2 public: 3 string addBinary(string a, string b) { 4 if(a==""&&b=="") return ""; 5 if(a=="") return b; 6 if(b=="") return a; 7 char *pa=&a[0],*pb=&b[0]; 8 int na=0,nb=0;

51nod 1413 权势二进制 (水题)

1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 取消关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能得到n. Input 单组测试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Inpu

51Nod 1413 权势二进制 (思维)

题意 : 一个十进制整数被叫做权势二进制, 当他的十进制表示的时候只由0或1组成.例如0, 1, 101, 110011都是权势二进制而2, 12, 900不是.当给定一个n (1<=n<=1,000,000)的时候, 计算一下最少要多少个权势二进制相加才能得到n. 分析 : 由于权势二进制可以在任意一位构造出1或者0, 那我就可以让每一位都在同时减1, 直到某一位变成0, 继续减其他位, 直到全部都等于0.例如 23303, 可以先构造11101进行相减, 使得除了零外的每一位都减1, 减两

51nod 1413:权势二进制

1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制表示的时候仅仅由0或1组成.比如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才干得到n. Input 单组測试数据. 第一行给出一个整数n (1<=n<=1,000,000) Output 输出答案占一行. Input演