AcWing|AcWing 每日一题 2022/5/5【2022. 倍数 17】

AcWing 每日一题 2022/5/5【2022. 倍数 17】 在意识到软件开发有很多钱可赚之后,农夫约翰开办了一家小型企业,为当地农业行业的客户编写简短的程序。
他的第一个编程任务对他来说似乎非常简单:他的客户希望他编写一个程序,该程序将数字 N 作为输入,并将 17×N 作为输出。
约翰刚刚写完这个简单的程序,他的客户就惊慌失措的给他打电话,告诉他输入和输出都必须用二进制数字表示,而且这些数字可能很大。
【AcWing|AcWing 每日一题 2022/5/5【2022. 倍数 17】】请帮助约翰完成他的编程任务。
给定一个用二进制表示并且不超过 1000 位的输入数字 N,输出二进制表示下的 17×N。
输入格式
一个不超过 1000 位的二进制数字 N。
输出格式
输出二进制表示下的 17×N。
输入样例:

10110111

输出样例:
110000100111

样例解释
给定数字 10110111 在十进制表示下为 183。
183×17=3111,在二进制表示下为 110000100111。
题目分析
这道题目用 py 好像可以一行代码解决…
用 C++ 的话,就是模板高精度乘法(二进制)
C++
#include #include #include #include #include #include #include #include#define x first #define y secondusing namespace std; typedef long long ll; typedef pair PII; const int N = 100000; const int MOD = 1000000007; const int INF = 0x3f3f3f3f; int gcd(int a, int b){return b ? gcd(b, a % b) : a; }vector mul(vector &a,int b) { // 存储计算后的数据 vectorc; // t 表示进位 int t=0; for(int i=0; i> a; vector v; for(int i = a.size() - 1; i >= 0; i -- ) v.push_back(a[i] - '0'); vector ans = mul(v, 17); for(int i = ans.size() - 1; i >= 0; i -- ) cout << ans[i]; return 0; }

python
print(bin(int(str(input()),2) * 17)[2:])

    推荐阅读