PS:跪求有空的大佬们给点参考建议,谢谢谢



输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

输入格式:

输入在一行中给出一个不超过9位的非负整数。

输出格式:

在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

//我用的很复杂的方法,输入不超过9位的数字,故把输入的数字分成三组a1,a2,a3分别对应 亿位部分(第9位)万位部分(5-8位)个十百千位部分(1-4位)
再分别进行计算输出

答案代码:

#include<stdio.h>

int pow1(int c)
{
    if(c==0)
        return 1;
    int t,sum=10;
    for(t=1;t<c;t++)
    {
        sum*=10;
    }

    return sum;
}


int main()
{
    int in,t,a1,a2,a3,c,pd;
    scanf("%d",&in);
    a3=in%10000;
    a2=(in-a3)%100000000/10000;
    a1=in/100000000;


    if(a1!=0)
        printf("%cY",a1+97);


    for(c=0;a2;)
    {
        if(a2%10==0)
        {
            c++;
            a2=a2/10;
        }

        else
            break;
    }
    a3=in%10000;
    a2=(in-a3)%100000000/10000;
    if(a2!=0)
    {
            if(a2>=1000)
                t=3;
            else if(a2>=100&&a2<1000)
                t=2;
            else if(a2>=10)
                t=1;
            else
                t=0;
        for(pd=0;t>=0&&t>=c;t--)
        {
            if(pd==1&&a2/(int)pow1(t)==0)
                continue;
            printf("%c",a2/(int)pow1(t)+97);
            if(a2/(int)pow1(t)==0)
                pd=1;
            if(a2/(int)pow1(t)!=0)
                switch(t)
            {
                case 3:printf("Q");break;
                case 2:printf("B");break;
                case 1:printf("S");break;
            }
            a2=a2%(int)pow1(t);
        }
        printf("W");
    }


    a3=in%10000;
    a2=(in-a3)%100000000/10000;
    for(c=0;a3;)
    {
        if(a3%10==0)
        {
            c++;
            a3=a3/10;
        }

        else
            break;
    }
    a3=in%10000;
    a2=(in-a3)%100000000/10000;
    if(a3!=0)
    {
        if(a2==0)
        {
            if(a3>=1000)
                t=3;
            else if(a3>=100&&a3<1000)
                t=2;
            else if(a3>=10)
                t=1;
            else
                t=0;
        }
        else
            t=3;
        for(pd=0;t>=0&&t>=c;t--)
        {
            if(pd==1&&a3/(int)pow1(t)==0)
                continue;
            printf("%c",a3/(int)pow1(t)+97);
            if(a3/(int)pow1(t)==0)
                pd=1;
            if(a3/(int)pow1(t)!=0)
                switch(t)
            {
                case 3:printf("Q");break;
                case 2:printf("B");break;
                case 1:printf("S");break;
            }
            a3=a3%(int)pow1(t);
        }
    }
    else
        printf("a");
    return 0;
}

PTA基础——7-23 币值转换(另类思路)

总结:

个人认为,这不该是个难题,关键问题还是在我的思路上,这种计算办法本就不好实现,但我还是固执的想把它改对(不停的调试修改),以至于我做了很久(大概用了2、3个小时,相当于大半个编程竞赛的时间)我不可能在一个题上用这么久磨出来正确答案的,这不现实。—— 这是我该改进的地方,没好的思路做出一部分就该跳,不能一直磨

其次,可能是我的思路问题(比较麻烦),我认为这是个很好的题,五个测试点又不复杂但又不那么容易让你看(或测试)出来问题,若没有测试点提示,我想我可能永远也改不对,因为我是参照给的提示来用不同的输入测试的,毕竟题目只给了两个样例,两个不多也不少,既能让你联系文字看懂题的大大意,又没有把题里的坑提示给你(真是辛苦出题人了)

总之如果看了我思路和代码的人想更深的学懂这道题,建议按每个测试点提示再联系代码深入思考一下

相关文章:

  • 2021-12-30
  • 2021-11-27
  • 2022-02-21
  • 2021-08-26
  • 2022-12-23
  • 2021-09-20
  • 2022-12-23
猜你喜欢
  • 2022-03-01
  • 2021-12-08
  • 2021-09-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案