5 条题解
-
1
一道
比较简单的递归题#include <iostream> #include <cmath> using namespace std; void out(long long x) { for(int i = 60;i >= 0;i--) //最大2^60(咋可能,我随便蒙的,啥都行,别太小) { if(pow(2,i) <= x)//如果2的i次方小于x,因为是逆着枚举的,所以这里是在找当2的i次方小于x时,最大的i { if(i == 1) //如果是2的一次方不用输出2(1),直接输出2 { cout << 2; } else if(i == 0)//如果是二的0次方也是直接输出 { cout << "2(0)"; } else//正常情况,还要继续找 { cout << "2("; out(i);//再继续往下搜 cout << ')'; } x -= pow(2,i);//x减去这个数 if(x != 0)//如果x减完后居然还有(???),简单地输出一个'+' { cout << '+'; } } } } int main() { long long n;//输入,要开long long,别学我还用int cin >> n; out(n); return 0;//返回 }
信息
- ID
- 1226
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 96
- 已通过
- 53
- 上传者