题目描述
blablabla
样例
#include<iostream>
#include<string>
#include<vector>
using namespace std;
string str1[] = {
"ling", "yi", "er","san","si","wu",
"liu","qi","ba","jiu"
};
string str2[] = {
"","Shi","Bai","Qian"
};
// 需要对四位数进行处理
vector<string> res;
// 按四位数进行考虑, 考虑传入的是第几部分的四位数
void get_out(string cur) {
int k = 4;// 记录位数
// 对于位数k 进行考虑, 先加入第k位
for (int i = 0; i < k; i++) {
// 判断是否是零, 如果是零考虑是否需要加入
if (cur[i] == '0' && !res.empty() && res[res.size() - 1] != "ling") res.push_back("ling");
// 如果不是零,则加入当前数值,以及他所代表的的单位
else if (cur[i] != '0') {
res.push_back(str1[cur[i] - '0']);// 加入当前值
if (k - i - 1 != 0) // 如果有单位的话
res.push_back(str2[k - i - 1]); // 加入单位
}
}
}
int main() {
int n, now;
cin >> n;
if (n == 0) {
cout << "ling" << endl;
return 0;
}
if (n < 0) {
now = -n;
}
else now = n;
string cur = to_string(now);
// 全部转化到9 位数形式, 考虑是否需要变化
int k = cur.size();
// 是否需要添加前导零
if (k < 9) cur = string(9 - k, '0') + cur;
// 现在转化到只考虑9位数存在的情况, 如果存在9位,亿位特殊考虑
if (cur[0] != '0') res.push_back(str1[cur[0] - '0'] + " " + "Yi");
int last_size = res.size();// 用来标记万位是否有有效数字
get_out(cur.substr(1, 4));
while (! res.empty() && res[res.size() - 1] == "ling") res.pop_back();// 去除加入的无效零
if (last_size < res.size()) res.push_back("Wan"); // 确认有加入位数,且不是零
get_out(cur.substr(5, 4));
while (!res.empty() && res[res.size() - 1] == "ling") res.pop_back();
if (n < 0) cout << "Fu ";
cout << res[0];
for (int i = 1; i < res.size(); i++) {
cout << ' ' << res[i];
}
cout << endl;
return 0;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla