#birthday0410a. [birthday0410_a]A + B

[birthday0410_a]A + B

题目描述

A+B问题

问题描述

编写一个程序,求两个整数AABB的和。

AABBA+BA+B都是32位有符号整数。

输入

A1A_1 B1B_1 A2A_2 B2B_200 00

输入包含不超过100个测试用例。每个测试用例在一行中用空格分隔的AABB表示。

A=B=0A=B=0时,输入结束,此测试用例不应处理。

输出

对于每个测试用例,输出A+BA+B的值。

已经完成了问题A,并准备进入测试阶段。但是由于疲劳的缘故,不幸地在A+B Problem上出现了一个错误。为了替JAPLJ辩护并承担全部责任,丸桥作为比赛的主持人对胜利者——独立负责撰写示范文章的大学研究生提出了和解条件...

丸桥:“请你立即将错误的源代码进行修正。”

你需要代表独立负责撰写示范文章的大学研究生的立场,提供能够击败JAPLJ三个错误答案的测试用例各一个。


任务

对于以下三个使用C++编写的错误答案程序,找到能够击败每一个错误答案的测试用例。

具体来说,对于每个错误答案程序,你需要编写一个程序输出满足A+B Problem问题描述和输入部分约束条件的测试用例,使得当将该测试用例作为输入提供给错误答案程序时,会产生错误的输出。

错误答案1的源代码:


#include <iostream>

using namespace std;

int main()
{
  int A, B;

  while(cin >> A >> B, A+B!=0) {
    cout << A+B << endl;
  }

  return 0;
}

错误答案2的源代码:


#include <iostream>

using namespace std;

int myAbs(int n)
{
  if(n < 0) return -n;
  else return n;
}

int main()
{
  int A, B;

  while(cin >> A >> B, (A|B) != 0) {
    while(myAbs(A) >= 100000) {
      if(A > 0) {
        B += 100000;
        A -= 100000;
      } else {
        B -= 100000;
        A += 100000;
      }
    }

    if(A > 0) {
      for(int i=0; i<A; ++i) {
        B++;
      }
    } else {
      for(int i=0; i<-A; ++i) {
        B--;
      }
    }

    cout << B << endl;
  }

  return 0;
}

错误答案3的源代码:


#include<iostream>

using namespace std;

int C[3][32];

int main()
{
  int A, B;

  while(cin >> A >> B, A!=0 || B!=0) {
    for(int i=0; i<32; ++i) {
      C[0][i] = (A >> i) & 1;
      C[1][i] = (B >> i) & 1;
    }

    for(int i=0; i<32; ++i) {
      if(C[0][i] + C[1][i] >= 2) {
        C[C[1][i-1] & 1][i+1]++;
        C[0][i]--;
        C[1][i]--;
      }
      C[2][i] = C[0][i] + C[1][i];
    }

    int R = 0;
    for(int i=0; i<32; ++i) {
      R |= C[2][i] << i;
    }

    cout << R << endl;
  }

  return 0;
}

输入

tt

一行一个整数tt表示所需击败的错误答案编号。

输出

输出能够击败第tt个错误答案的测试用例。

输出格式必须符合A+B Problem输入格式要求。


限制条件

所有输入数据满足以下限制:

  • 1t31 \leq t \leq 3

评分标准

共有三个测试用例,

  • t=1t = 1 时,如果正确则得33分
  • t=2t = 2 时,如果正确则得33分
  • t=3t = 3 时,如果正确则得34分