sicily 1201. 01000001

原创 2015年11月18日 19:51:32

1201. 01000001

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Adding binary numbers is a very simple task, and very similar to the longhand addition of decimal numbers. As with decimal numbers, you start by adding the bits (digits) one column at a time, from right to left. Unlike decimal addition, there is little to memorize in the way of rules for the addition of binary bits:

   0 + 0 = 0 
   1 + 0 = 1 
   0 + 1 = 1 
   1 + 1 = 10 
   1 + 1 + 1 = 11

Just as with decimal addition, when the sum in one column is a two-bit (two-digit) number, the least significant figure is written as part of the total sum and the most significant figure is ``carried" to the next left column. Consider the following examples:

                       11  1 <-- Carry bits --> 1   11 
  1001101             1001001                    1000111 
+ 0010010           + 0011001                  + 1010110 
 --------           ---------                  ---------
  1011111             1100010                   10011101

The addition problem on the left did not require any bits to be carried, since the sum of bits in each column was either 1 or 0, not 10 or 11. In the other two problems, there definitely were bits to be carried, but the process of addition is still quite simple.

Input

The first line of input contains an integer N,(1<=N<=1000),which is the number of binary addition problems that follow. Each problem appears on a single line containing two binary values separated by a single space character. The maximum length of each binary value is 80 bits (binary digits). Note: The maximum length result could be 81 bits (binary digits).

Output

For each binary addition problem, print the problem number, a space, and the binary result of the addition. Extra leading zeroes must be omitted.

Sample Input

3 
1001101 10010 
1001001 11001 
1000111 1010110

Sample Output

1 1011111 
2 1100010 
3 10011101

题目分析

两个01字符串相加
相加前将两个字符串反转
注意前缀零和结果为零的情况


#include <iostream>
#include <memory.h>

std::string reverse(std::string s) {
  std::string ans = "";
  for (int i = s.length()-1; i >= 0; --i)
    ans += s[i];
  return ans;
}

int main()
{
  int ans[81];
  std::string s1, s2;
  int num;
  std::cin >> num;
  for (int k = 1; k <= num; ++k) {
    std::cin >> s1 >> s2;
    s1 = reverse(s1);
    s2 = reverse(s2);
    memset(ans, 0, sizeof(ans));
    int count = s1.length() > s2.length() ? s1.length() : s2.length();
    for (int i = 0; i < count; ++i) {
      if (i < s1.length())
        ans[i] += s1[i] - '0';
      if (i < s2.length())
        ans[i] += s2[i] - '0';
      if (ans[i] >= 2) {
        ans[i] %= 2;
        ans[i+1]++;
      }
    }
    std::cout << k << " ";
    bool pre = true;
    for (; count >= 0; --count) {
      if (ans[count] == 0) {
        if (!pre)
          std::cout << ans[count];
      } else {
        pre = false;
        std::cout << ans[count];
      }
    }
    if (pre)
      std::cout << "0";
    std::cout << std::endl;
  }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sicily--1201. 01000001

1.在最后的输出时,要判断结果是否为0,也就是 ans 是否全为0或则是为空 2. /*if(ans.empty()) cout = 0; i--) { if(flag && ...

POJ 2845 01000001 二进制加法 套用高精度加法运算代码

 http://poj.org/problem?id=2845、刚刚开始用的转换方法,例子都过了但是总是WA,现在还不清楚哪里的问题然后用了高精度加法AC,但是注意输出的时候前导0和结果为0的情况01...

sicily题目1093 1888

  • 2012年10月16日 16:25
  • 1KB
  • 下载

Sicily题目分类

  • 2015年10月15日 10:51
  • 46KB
  • 下载

模板_poj1201Intervals_差分约束系统解决(类区间问题)

poj1201题目链接 题意: 第一行输入n,下面输入n个限制条件,条件的格式为 ai bi ci,  0 差分约数系统的含义,其实就是如果有n个变量在m个形如aj-ai>=bk(类...

中山大学 sicily 二叉树重建

  • 2012年10月31日 15:33
  • 2KB
  • 下载

Sicily_1198_Substring

  • 2012年06月05日 23:05
  • 2KB
  • 下载

HDUOJ 1201 18岁生日(判断闰年)

HDUOJ 1201 18岁生日 18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O...
  • hpulw
  • hpulw
  • 2015年07月26日 22:50
  • 415

sicily刷题指南

  • 2016年01月20日 09:42
  • 49KB
  • 下载

二叉树重建 sicily1935

  • 2011年05月17日 21:11
  • 15KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sicily 1201. 01000001
举报原因:
原因补充:

(最多只允许输入30个字)