在意识到软件开发有很多钱可赚之后,农夫约翰开办了一家小型企业,为当地农业行业的客户编写简短的程序。
他的第一个编程任务对他来说似乎非常简单:他的客户希望他编写一个程序,该程序将数字 N 作为输入,并将 17×N 作为输出。
约翰刚刚写完这个简单的程序,他的客户就惊慌失措的给他打电话,告诉他输入和输出都必须用二进制数字表示,而且这些数字可能很大。
请帮助约翰完成他的编程任务。
给定一个用二进制表示并且不超过 1000 位的输入数字 NN,输出二进制表示下的 17×N。
输入格式
一个不超过 1000 位的二进制数字 N。
输出格式
输出二进制表示下的 17×N。
输入样例:
10110111
输出样例:
110000100111
样例解释
给定数字10110111 在十进制表示下为 183。
183×17=3111,在二进制表示下为 110000100111。
代码:
// 由于17的特殊性(100001) 直接两个做加法就行了
#include <bits/stdc++.h>
using namespace std;
string a, b;
vector<int> add(vector<int> &A, vector<int> &B)
{
vector<int> C;
for (int i = 0, t = 0; i < A.size() || i < B.size() || t; i++)
{
if (i < A.size())
t += A[i];
if (i < B.size())
t += B[i];
C.push_back(t % 2);
t /= 2;
}
return C;
}
int main()
{
cin >> a;
if (a == "0")
{
puts("0");
return 0;
}
b = a + "0000";
vector<int> A, B;
for (int i = a.size() - 1; i >= 0; i--)
A.push_back(a[i] - '0');
for (int i = b.size() - 1; i >= 0; i--)
B.push_back(b[i] - '0');
auto C = add(A, B);
for (int i = C.size() - 1; i >= 0; i--)
cout << C[i];
return 0;
}