pta汉字大写金额*(带小数)

样例能过,带答案不对,特殊情况也试了,大家帮忙看看有什么能补充的?谢谢!

img

img

代码


```c

#include <stdio.h>

// 输出大写金额
void CurPrint(double amount);

int main()
{
    double amount;
    scanf("%lg", &amount);
    CurPrint(amount);
    putchar('\n');
    return 0;
}

/* 你提交的代码将被嵌在这里 */
// 输出大写金额
void CurPrint(double amount){
    int j= amount,a[20],k=amount;
    double xia= amount-j;
    int n=0;//记录位数;
    j=xia*1000;//把小数点后三位化为整数
    if(j%10>=5){//根据最后一位数进行四舍五入
        j/=10;
        j++;
        if(j>=100)k++;
    }else{
        j/=10;
    }
    if(k==0&&xia==0)printf("零元");//整数部分和小数部分全为零
    while(k!=0){
        a[n++]=k%10;
        k/=10;           
    }
    n--;
    for(n;n>=0;n--){//输出整数部分
        switch(a[n]){
            case 0:printf("零");break;
            case 1:printf("壹");break;
            case 2:printf("贰"); break;
            case 3:printf("叁");break;
            case 4:printf("肆");break;
            case 5:printf("伍");break;
            case 6:printf("陆");break;
            case 7:printf("柒");break;
            case 8:printf("捌");break;
            case 9:printf("玖");break;
        }
        switch(n+1){
            case 1:printf("元");break;
            case 2:printf("拾");break;
            case 3:printf("佰");break;
            case 4:printf("仟");break;
            case 5:printf("万");break;
            case 6:printf("拾");break;
            case 7:printf("佰");break;
            case 8:printf("仟");break;
            case 9:printf("亿");break;
            case 10:printf("拾");break;
            case 11:printf("佰");break;
            case 12:printf("仟");break;
           
        } 
    }
    //输出小数部分
    if(xia*1000<10&&amount!=0){//整数部分为零但小数部分不为零
        printf("零分");
    }else if(amount!=0){
        if(j<10){
            printf("零角");
            switch(j){
            case 0:printf("零");break;
            case 1:printf("壹");break;
            case 2:printf("贰"); break;
            case 3:printf("叁");break;
            case 4:printf("肆");break;
            case 5:printf("伍");break;
            case 6:printf("陆");break;
            case 7:printf("柒");break;
            case 8:printf("捌");break;
            case 9:printf("玖");break;
        }
            printf("分");
        }else if(j<100){
            switch(j/10){
            case 0:printf("零");break;
            case 1:printf("壹");break;
            case 2:printf("贰"); break;
            case 3:printf("叁");break;
            case 4:printf("肆");break;
            case 5:printf("伍");break;
            case 6:printf("陆");break;
            case 7:printf("柒");break;
            case 8:printf("捌");break;
            case 9:printf("玖");break;
            }
            printf("角");
            switch(j%10){
            //case 0:printf("零");break;
            case 1:printf("壹分");break;
            case 2:printf("贰分"); break;
            case 3:printf("叁分");break;
            case 4:printf("肆分");break;
            case 5:printf("伍分");break;
            case 6:printf("陆分");break;
            case 7:printf("柒分");break;
            case 8:printf("捌分");break;
            case 9:printf("玖分");break;
            }
            
        }
        
    }
}

```

这题有输出样例吗,发出来看看。
2023.6.25修改如下,供参考:

#include <stdio.h>
// 输出大写金额
void CurPrint(double amount);

int main()
{
    double amount;
    scanf("%lg", &amount);
    CurPrint(amount);
    putchar('\n');
    return 0;
}
/* 你提交的代码将被嵌在这里 */
// 输出大写金额
void CurPrint(double amount)
{
    amount += 0.005; 
    int j = (int)amount, a[20] = { 0 }, k = (int)amount; 
    double xia = amount - j;
    int n = 0;//记录位数

    while (j != 0) {
        a[n++] = j % 10;
        j /= 10;
    }
    for (n--; n >= 0; n--) {//输出整数部分
        switch (a[n]) {
        case 0:printf("零"); break;
        case 1:printf("壹"); break;
        case 2:printf("贰"); break;
        case 3:printf("叁"); break;
        case 4:printf("肆"); break;
        case 5:printf("伍"); break;
        case 6:printf("陆"); break;
        case 7:printf("柒"); break;
        case 8:printf("捌"); break;
        case 9:printf("玖"); break;
        }
        switch (n + 1) {
        case 1:printf("元"); break;
        case 2:printf("拾"); break;
        case 3:printf("佰"); break;
        case 4:printf("仟"); break;
        case 5:printf("万"); break;
        case 6:printf("拾"); break;
        case 7:printf("佰"); break;
        case 8:printf("仟"); break;
        case 9:printf("亿"); break;
        case 10:printf("拾"); break;
        case 11:printf("佰"); break;
        case 12:printf("仟"); break;
        }
    }
    //输出小数部分
    j = (int)(xia * 100);
    if (j < 10) {
        if (k)            
            printf("零角");
        switch (j) {
        case 0:printf("零"); break;
        case 1:printf("壹"); break;
        case 2:printf("贰"); break;
        case 3:printf("叁"); break;
        case 4:printf("肆"); break;
        case 5:printf("伍"); break;
        case 6:printf("陆"); break;
        case 7:printf("柒"); break;
        case 8:printf("捌"); break;
        case 9:printf("玖"); break;
        }
        printf("分");
    }
    else if (j < 100) {
        switch (j / 10) {
        case 0:printf("零"); break;
        case 1:printf("壹"); break;
        case 2:printf("贰"); break;
        case 3:printf("叁"); break;
        case 4:printf("肆"); break;
        case 5:printf("伍"); break;
        case 6:printf("陆"); break;
        case 7:printf("柒"); break;
        case 8:printf("捌"); break;
        case 9:printf("玖"); break;
        }
        printf("角");
        switch (j % 10) {
        case 0:printf("零分"); break;
        case 1:printf("壹分"); break;
        case 2:printf("贰分"); break;
        case 3:printf("叁分"); break;
        case 4:printf("肆分"); break;
        case 5:printf("伍分"); break;
        case 6:printf("陆分"); break;
        case 7:printf("柒分"); break;
        case 8:printf("捌分"); break;
        case 9:printf("玖分"); break;
        }
    }
}

已解决,谢谢解答