7-83 币值转换 (20分)

整了3个小时终于做出来了(我是菜鸡,大佬们别喷),初始的时候解题方向整错了:我把单位和数字放在一起输出了,导致以我现在能力无法正确表达出汉字的习惯。意识到可能需要重写代码,就看了下网上的答案,大体思路是把符号和数字的输出分开,然后我就接着这个思路继续按我的方式来做题,以下是我的代码,测试点是全通过了,应该没问题吧哈哈:

#include<stdio.h>
#include<math.h>
int main(int argc ,char** argv){

    unsigned int yuan;
    scanf("%u",&yuan);
    int state = 1;
    int first_num,m = yuan,cnt = 0,continuous_zero = 0;
    /*如果一开始的输入为0,那么输出0*/
    if(yuan == 0){
        printf("a");
    }

    /*获取数字位数*/
    while(m != 0){
        m /= 10;
        cnt++;
    }

    char uppercase_num;
    double digit;

    while(cnt--){

         /*取得首位数字*/
        digit = pow(10,cnt); 
        first_num = yuan / digit;

        uppercase_num = 'a' + first_num; //获得大写数字

        if(uppercase_num == 'a' && state == 0){ //本次数字是连续零
            continuous_zero++;
        }else if(uppercase_num == 'a'){//本次数字是单个零
            state = 0;
        }else if(continuous_zero != 0){ //经过前两个分支,这个分支的意思是:本次数字不是零,但是前面有几个连续零
            printf("a");
            continuous_zero = 0;
            state = 1;
        }else{ //本次数字不是零
            if(state == 0){ //前面有单个零
                printf("a");
            }else;
            state = 1; //当前数字不是零
        }

        yuan %= (int)digit;

        if(state == 1){ //当前数字不是零,所以输出当前数字的大写形式
            printf("%c",uppercase_num);
        }else;
        if(state == 1){ //当前数字不是零,需要输出符号
            switch(cnt + 1){
                case 2: printf("S"); break;
                case 3: printf("B"); break;
                case 4: printf("Q"); break;
                case 5: printf("W"); break;
                case 6: printf("S"); break;
                case 7: printf("B"); break;
                case 8: printf("Q"); break;
                case 9: printf("Y"); break;
                default: ; 
            }

        }else{ //当前数字是零或者连续零
            switch(cnt + 1){

                case 5: if(continuous_zero > 2){ //是3个或以上的连续零,所以跳过符号'W'
                            ;
                        }else{ //2个或以下的零,需要输出符号'W'
                            printf("W"); break;
                        }
                default: ; 
            }
        }
    }
    return 0;
}

 

因为是一点一点调试完成的,不是一气呵成的,所以逻辑比较乱,比较难看懂。以上是自己纪念一下自己的答案嘻嘻。

以下是我在网上看到的答案,他用的是for循环,用continue解决的多零问题,感觉很棒,可惜我当时已经写了一半的代码,就没用这个方法,这是for循环答案的链接:7-23 币值转换 (20 分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值