PAT【甲级】1082

题目链接:PAT【甲级】1082
题目简述:给定⼀个不超过9位的整数,你应该用传统的中文方式阅读它。 如果是负的,⾸先输出“Fu”, 例如,-123456789被读作“Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu”。 注意:零(“ling”)必须根据中国传统正确处理。 例如,100800是“yi Shi Wan ling ba Bai”。

#include<bits/stdc++.h>
using namespace std;

string radix[4] = {"", "Shi", "Bai", "Qian"};
string bitt[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
stack<string> ans;

int main(){
    int n, w = 0, t = 0;
    cin >> n;
    if(n < 0) cout << "Fu ";
    n = abs(n);
    if(n == 0) ans.push(bitt[0]);//特殊情况
    while(n != 0){
        //这三行是初始化,接下来每组再进行相同的处理
        if(w == 4) ans.push("Wan");
        if(w == 8) ans.push("Yi");
        if(w % 4 == 0) t = 0;
        if((n % 10 == 0 && t != 0) || n % 10 != 0){//对于后缀0不作处理,跳过
            if(w % 4 != 0 && n % 10 != 0)//添加其数位标志【对于个位数或元素0不作处理】
                ans.push(radix[w % 4]);
            ans.push(bitt[n % 10]);
            t = n % 10 != 0 ? 1 : 0;//对于0标志进行处理,避免读取连续0,只保留一个就行。【为1,代表下面的第一个0可被读取】
        }
        w++;
        n /= 10;
    }
    while(!ans.empty()){
        cout << ans.top();
        ans.pop();
        if(!ans.empty()) cout << " ";
    }
    cout << endl;
    return 0;
}

其实做这种模拟题,就是脑中先有大的框架,然后根据输入与输出来决定是否要调整代码。当然,抽象思维是很重要的东西,就比如这个题目:由于每四位可以化作一部分,而且它的处理是一模一样的,读出来的数字样式也是相同的方式,唯一不同的只有在结尾加一个Wan、Yi,这样只需判断处理即可。

此外,还要注意特殊情况的出现。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值