PTA刷题Basic篇——1002.写出这个数——Day(1)

问题描述

在这里插入图片描述我们输入一个整数然后不断取各个位置进行加和操作,得到的和用汉字输出,中间带空格。

问题分析

这个问题不要被表面的要求蒙蔽了,我们如果真的输入一个整数然后不断求各位的数字那可太麻烦了。所以我们要取个巧,输入字符串来代替整数,然后取字符串的各位进行加和操作。
得到了总和怎么求每位数字呢?题目有一处提示,n小于10的100次方,也就是这个n最大也就是9999…9(一共100个9),100*9=900.所以我们的最后的总和只能是一个三位数。三位数取各位数字就简单很多了。
还有就是关于数字写成字符串,我们可以写一个数组来方便取出对应的字符串,这里我不嫌麻烦写了更通俗的switch…case…结构,更加清晰。

代码

#include <iostream>
#include <string>
using namespace std;
string convert(int n)
{
    string res;
    switch(n){
    case 1:
        res = "yi";
        break;
    case 2:
        res = "er";
        break;
    case 3:
        res = "san";
        break;
    case 4:
        res = "si";
        break;
    case 5:
        res = "wu";
        break;
    case 6:
        res = "liu";
        break;
    case 7:
        res = "qi";
        break;
    case 8:
        res = "ba";
        break;
        case 9:
        res = "jiu";
        break;
    case 0:
        res = "ling";
        break;
    }
    return res;
}
int main()
{
    string n;
    cin>>n;
    int sum = 0;
    for(int i = 0;i < n.length();i++)
    {
        sum += n[i] - '0';
    }
    int g,s,b;
    b = sum / 100;
    s = (sum % 100) / 10;
    g = sum % 10;
    string b_res = convert(b);
    string g_res = convert(g);
    string s_res = convert(s);
    //还有一个问题i,这里我写的比较麻烦,只是为了更清晰:
    //如果百位数字不是0的话,我们就可以无脑输出了,可是如果百位数字是0的话,我们不能把百位的0输出
    //同理如果百位和十位都是0,我们只输出一个个位即可
    if(b != 0)
        cout<<b_res<<" "<<s_res<<" "<<g_res;
    else if(b == 0 && s == 0)
        cout<<g_res;
    else if(b == 0 and s != 0)
        cout<<s_res<<" "<<g_res;
    return 0;

总结

答题用时:11min
Q2——finish√

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值