刷题记录

PAT刷题记录

1004 甲级 read number in Chinese
此代码为暴力解法,不提倡采用 (应该有更好的方法待发掘,比如直接计算)


```cpp
#include "stdio.h"
#include "math.h"
#include "string.h"
void read(int n)
{    if (n == 0)        printf("ling");    else if (n == 1)        printf("yi");    else if (n == 2)        printf("er");    else if (n == 3)        printf("san");    else if (n == 4)        printf("si");    else if (n == 5)        printf("wu");    else if (n == 6)        printf("liu");    else if (n == 7)        printf("qi");    else if (n == 8)        printf("ba");    else if (n == 9)        printf("jiu");}
void danwei(int n)
{    if (n == 0)        read(n);    if (n == 1)        printf("Shi");    if (n == 2)        printf("Bai");    if (n == 3)        printf("Qian");    if (n == 4)        printf("Wan");    if (n == 9)        printf("Yi");}
int main()
{    char s[11];    int num;    scanf("%s", s,11);    num = strlen(s);    int ss[11];    if (s[0] == 45)    {        printf("Fu ");        for (int i = 1; i < num; i++)            ss[i] = s[num - i] - 48;        for (int i = num - 1; i > 1; i--)            if (i == 9)            {                read(ss[i]);                printf(" ");                danwei(i);                printf(" ");            }            else            {                if (ss[i] == 0)                {                    if (ss[i - 1]&&i%5!=0)                    {                        read(ss[i]); printf(" ");                    }                  if(i%5==0 && (ss[i + 1] != 0 || ss[i + 2] != 0 || ss[i + 3] != 0))                    {                        danwei(i-1);                        printf(" ");                    }                    if (i % 5 == 0 && ss[i - 1] != 0 && ss[i + 1] == 0 && ss[i + 2] == 0 && ss[i + 3] == 0)                    {                        read(ss[i]);                        printf(" ");                    }                }                else                {                    read(ss[i]);                    printf(" ");                    if (i != 5)                        danwei((i - 1) % 4);                    else                        danwei(i - 1);                    printf(" ");                }            }        if (ss[1] || num == 1)            read(ss[1]);        printf("\n");    }    else    {        for (int i = 0; i < num; i++)            ss[i] = s[num - i - 1] - 48;        for (int i = num - 1; i > 0; i--)            if (i == 8)            {                read(ss[i]);                printf(" ");                danwei(i+1);                printf(" ");            }            else            {                if (ss[i] == 0)                {                    if (ss[i - 1] != 0&&i%4!=0)                    {                        read(ss[i]);                         printf(" ");                    }                    if (i % 4 == 0&&ss[i-1]!=0&&(ss[i+1]!=0||ss[i+2]!=0||ss[i+3]!=0))                    {                        danwei(i);                         printf(" ");                        read(ss[i]);                        printf(" ");                                             }                    if (i % 4 == 0 && ss[i - 1] != 0 && ss[i + 1] == 0 && ss[i + 2] == 0 && ss[i + 3] == 0)                    {                        read(ss[i]);                        printf(" ");                  }                 }                else                {                    read(ss[i]);                    printf(" ");                    if (i != 4)                        danwei(i % 4);                    else                        danwei(i);                    printf(" ");                }            }        if (ss[0] || num == 1)            read(ss[0]);        printf("\n");    }}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值