题目描述
每次可以把一个字符变成两个字母表中比它小一位的字符。例如,可以把‘b’变成两个‘a’,可以把‘z’变成两个‘y’。希望最终可以生成x个’a’,求出初始的字符串?
输入描述:
一个正整数x代表最终’a’的数量 1≤x≤1000
输出描述:
操作前的字符串,最短下的任一一种
样例
5
ca
(位运算) $O(logn)$
C++ 代码
#include <iostream>
#include <string>
using namespace std;
int n, m;
string s;
int main()
{
cin >> n;
while (n > 0) {
if ((n & 1) == 1)
s += (char)(m + 'a');
n = n >> 1;
m++;
}
cout << s;
}