2 条题解
-
1
I Have A Big Number
一道普通的模拟,只要从低位四个四个一切,切到第12个时全部压入即可,因为没有要求 载 之后再分万载,亿载之类。
参考代码
#include <iostream> #include <vector> #include <string> using namespace std; const vector<string> units = { "", "wan", "yi", "zhao", "jing", "gai", "zi", "rang", "gou", "jian", "zheng", "zai" }; int main() { string N; cin >> N; vector<string> parts; int position = N.size(); int count = 0; while(position > 0) { int start = max(0, position - 4); int len = position - start; if(count < 11) { parts.push_back(N.substr(start, len)); } else { parts.push_back(N.substr(0, position)); break; } position -= 4; count++; } string res; for (int i = parts.size() - 1; i >= 0; --i) { if (parts[i] == "0000") continue; size_t j = 0; while (j < parts[i].size() - 1 && parts[i][j] == '0') ++j; res += parts[i].substr(j) + units[i]; } cout << res << endl; return 0; }
-
0
I Have A Big Number
把所给数字当字符串处理,根据每种单位所需长度依次匹配,值得注意的是,万之后的余数部分也可以当作一种“没有名字的单位”,在匹配过程中依次输出即可
参考代码(python)
from sys import stdin def p(i:int): global l if length-l<=a[i][0]: return x=length-l-a[i][0] num=int(''.join(n[l:l+x])) l+=x if num==0: return ans=str(num)+a[i][1] print(ans,end='') a=((44,'zai'),(40,'zheng'),(36,'jian'),(32,'gou'),(28,'rang'),(24,'zi'),(20,'gai'),(16,'jing'),(12,'zhao'),(8,'yi'),(4,'wan'),(0,'')) n=list(stdin.readline().rstrip()) length=len(n) l=0 for _ in range(len(a)): p(_)
- 1
信息
- ID
- 1101
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 96
- 已通过
- 11
- 上传者