学习C++从娃娃抓起!记录下洛谷C++学习和备考过程中的题目,记录每一个瞬间。
附上汇总贴:洛谷刷题C++语言 | 汇总_热爱编程的通信人的博客-CSDN博客
【题目描述】
任何一个正整数都可以用 2 的幂次方表示。例如 137=2^7+2^3+2^0。
同时约定次方用括号来表示,即 a^b 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)
进一步:
7=2^2+2+2^0 ( 2^1 用 2 表示),并且 3=2+2^0。
所以最后 137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如 1315=2^10+2^8+2^5+2+1
所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。
【输入】
一行一个正整数 n。
【输出】
符合约定的 n 的 0,2 表示(在表示中不能有空格)。
【输入样例】
1315
【输出样例】
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int mark[20] = {1};
void f(int n)
{
int flag = 0;
while (n>=mark[flag]) {
flag++;
}
flag--;
if (flag==1) {
cout << 2;
} else {
if (flag==0) {
cout << "2(0)";
} else {
cout << "2(";
f(flag);
cout << ")";
}
}
n -= mark[flag];
if (n!=0) {
cout << "+";
f(n);
}
}
int main()
{
int n;
cin >> n;
for (int i=1; i<17; i++) mark[i] = mark[i-1] * 2;
f(n);
return 0;
}
【运行结果】
137
2(2(2)+2+2(0))+2(2+2(0))+2(0)