PTA问题:币值转换

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

输入格式:

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

输出格式:

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

输入样例1:

813227345

输出样例1:

iYbQdBcScWhQdBeSf

输入样例2:

6900

输出样例2:

gQjB

 

#include <stdio.h>
#include <math.h> 
void da_xie(int n);//定义大写函数
void dan_wei(int n); //定义单位输出函数
int main(void){
    int pow, num, t_num, digit, count, old_digit;
    scanf("%d",&num);
    t_num = num;
    pow = 1;
    count = 1;
    if(num == 0){
    	da_xie(num);//处理最小个位数 
	}else{
		//便于将一串数字展开:如12345 --> 1 2 3 4 5 
		while(t_num / 10 != 0){
        	count++;
        	pow *= 10;
        	t_num /= 10;
    	}
    
    	old_digit = num / pow;//记录前一个数字 
   	 	num %= pow;
    	pow /= 10; 
    
    while(pow >= 1){
        digit = num / pow;//记录当前数字 
        if(digit != 0){//如果当前数字不为零 
        	if(old_digit == 0){//前一个数字为零 
				da_xie(old_digit);
        		if(count == 5){//特殊情况:10004000 
        			dan_wei(count);
				}
			}else{
				da_xie(old_digit);
				dan_wei(count);
			}
		}else{
			if(old_digit == 0){
        		if(count == 5){//特殊情况:10004000 
        			dan_wei(count);
				}
			}else{
				da_xie(old_digit);
				dan_wei(count);
			}
		}
		
        old_digit = digit;
        
       	count--;
        num %= pow;
        pow /= 10;  
    }
    
    //判断最后一位数,存在于old_digit中的 
    if(old_digit != 0){
    	da_xie(old_digit);
	}
	}
    

    return 0;
}

void da_xie(int n){
	 switch(n){
		case 9:printf("9");break;
		case 8:printf("8");break;
		case 7:printf("7");break;
		case 6:printf("6");break;
		case 5:printf("5");break;
		case 4:printf("4");break;
		case 3:printf("3");break;
		case 2:printf("2");break;
		case 1:printf("1");break;
		case 0:printf("0");break;
		default:break;
	}
}
void dan_wei(int n){
	switch(n){
		case 9:printf("亿");break;
		case 8:printf("千");break;
		case 7:printf("百");break;
		case 6:printf("十");break;
		case 5:printf("万");break;
		case 4:printf("千");break;
		case 3:printf("百");break;
		case 2:printf("十");break;
		case 1:
		default:break;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值