7-23 币值转换(转)

太顶了,是我脑子没长好。
转需
PTA上基础题库暂时尚未完成,完成后进行整合。

    原创

    7-23 币值转换(20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接: https://blog.youkuaiyun.com/yubai258/article/details/81362774

    #include<stdio.h>
    #include<string.h>
    int main()
    {
      char a[10]={'a','b','c','d','e','f','g','h','i','j'};
      char b[]={' ',' ','S','B','Q','W','S','B','Q','Y'};
      char num[10];
      gets(num);
      int l=strlen(num);
      int n;
      int i=0;
      int ling=0;
      int k=0;                   
      if(num[0]=='0'&&l==1) printf("a");  //0的情况,但测试点不包含这个
      else
      while(l-->0)
      {
        n=num[i++]-'0';
        if(n!=0)
        {
          if(ling==1)  
              printf("a");
          printf("%c",a[n]);
          ling=0;
        }
        else
        {
            ling=1;
            if(l==4&&k==1) printf("W");
            continue;
        }                                    //按照中文习惯,四位数一段规律,再考虑万怎么处理
        if(l>0)
        {
            if(l>4&&l<8) k=1;
            printf("%c",b[l+1]);
        }
      }
      return 0;
    }

    0 个人打赏
    文章最后发布于: 2018-08-02 16:32:12
    PTA(Programming Teaching Assistant)平台上的币值转换问题通常是将给定的数字金额按照中文币值的规则进行转换。以下是实现思路和Python代码示例: ### 实现思路 1. **数字分段处理**:将输入的数字按每四位一组进行划分,因为中文币值的单位是“万”“亿”等,每四位对应一个大的单位。 2. **处理每四位数字**:对于每四位数字,将其转换为中文数字和对应的单位(如“千”“百”“十”)。 3. **处理大单位**:根据分段情况,添加“万”“亿”等大单位。 4. **特殊情况处理**:处理零的情况,避免出现多个连续的零等。 ### 代码示例 ```python # 中文数字映射 chinese_num = [&#39;零&#39;, &#39;一&#39;, &#39;二&#39;, &#39;三&#39;, &#39;四&#39;, &#39;五&#39;, &#39;六&#39;, &#39;七&#39;, &#39;八&#39;, &#39;九&#39;] # 中文单位映射 chinese_unit = [&#39;&#39;, &#39;十&#39;, &#39;百&#39;, &#39;千&#39;] # 大单位映射 big_unit = [&#39;&#39;, &#39;万&#39;, &#39;亿&#39;] def four_digits_to_chinese(num_str): result = &#39;&#39; has_non_zero = False zero_flag = False for i, digit in enumerate(num_str): digit = int(digit) if digit == 0: zero_flag = True else: if zero_flag: result += &#39;零&#39; zero_flag = False result += chinese_num[digit] + chinese_unit[3 - i] has_non_zero = True if result.endswith(&#39;零&#39;): result = result[:-1] if not has_non_zero: result = &#39;零&#39; return result def num_to_chinese(num): num_str = str(num) num_len = len(num_str) segments = [] while num_str: segments.append(num_str[-4:].zfill(4)) num_str = num_str[:-4] result = &#39;&#39; for i, segment in enumerate(segments): segment_chinese = four_digits_to_chinese(segment) if segment_chinese != &#39;零&#39; or (i == 0 and len(segments) == 1): result = segment_chinese + big_unit[i] + result if result.startswith(&#39;零&#39;): result = result[1:] if result.endswith(&#39;零&#39;): result = result[:-1] return result # 示例使用 num = 123456789 print(num_to_chinese(num)) ``` ### 复杂度分析 - **时间复杂度**:$O(n)$,其中 $n$ 是输入数字的位数。 - **空间复杂度**:$O(n)$,主要用于存储转换后的中文币值字符串。
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值