pta

一:实验代码

include <stdio.h>

char theValue[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
char theUnit[5] = { 'S','B','Q','W','Y' };
int Billion = 100000000;

int main()
{
int num;
scanf("%d", &num);

if (num == 0)
    printf("a");
else
{
    while (num)                   // 判断数字的最高位
    {
        if (num / Billion > 0)
            break;
        else
            Billion /= 10;
    }

    while (num)
    {
        int temp = num / Billion;

        if (temp == 0)
        {
            if ((num - temp * Billion) / (Billion / 10) != 0)
                printf("a");
        }
        else 
        {
            printf("%c", theValue[temp]);
            if (Billion == 1e5 || Billion == 1e1)
                printf("%c", theUnit[0]);
            else if (Billion == 1e6 || Billion == 1e2)
                printf("%c", theUnit[1]);
            else if (Billion == 1e7 || Billion == 1e3)
                printf("%c", theUnit[2]);
        }
        if (Billion == 1e4)
            printf("%c", theUnit[3]);
        else if (Billion == 1e8)
            printf("%c", theUnit[4]);

        num -= temp * Billion;
        Billion /= 10;
    }
}

return 0;

}
二:设计思路
首先从宏观上来看,我们需要一个存放数字即a-f的字符数组,一个存放单位即S,B,Q,W,Y的字符数组,还需要一个结果数组,存放单位和数字的组合。
在题目保证输入为非负整数的情况下,首先需判定输入数为0的情况,一般的处理手段是输出a,return 0。如果输入数不为0,那么将输入数从低到高取位判定。取得的当前位有0和非0之分,若当前位非0,且当前位数不为1即当前位不为个位,则存放单位与数字。注意由于一开始不知道输入数的位数,故结果数组的索引只能从低到高,一般从0开始,所以先存放单位,后存放数字。若当前位为0,则大概需要注意下述3种情况:
1.有单位,无数字:万位
2.无单位,无数字:
3 千位,个位
4 除万位之外,前面一位为0
5无单位,有数字:
除万位,千位,个位之外,前面一位不为0
上述情况的操作流程大致为:
1.若当前位为万位,则必存单位
2.若当前位不为万位,则又需要分情况讨论:
3当前位为千位或个位,不存数字
4 当前位不为千位,且不为个位,但前面一位为0,也不存数字
5 当前位不为千位,且不为个位,前面一位非0,存数字

posted @ 2019-02-18 13:57  新仔仔  阅读(174)  评论(0编辑  收藏  举报