数字金额转换为汉字形式

数字金额转换大写汉字

/*

思路:  根据输入的数字大小确认 数字的是几位数 以及位数的单位量 比如输入10000 共5位数,单位量为万(10000)

然后根据位数 在来进行转换

用两个数字保存大写金额单位和大小汉字0到9,然后在根据位数进行对于查找  先查找大写汉字,用一个字符数组保存,
在查找金额单位,在将其连接到字符串后面 最后输出字符就ok了
 最大金额范围(0-9999999999999)13位数
 
*/
#include<iostream>
#include<string>
using namespace std;

char *Money_Change( long double money);   //数字金额转为汉字金额函数声明

int main()
{
     long  double money;
     while (1)
     {
        cout<<"请输入数字金额:";
        cin>>money;
        
        cout<<Money_Change(money)<<endl;
     }
    system("pause");
    return 0;
}


char *Money_Change( long double money)  //数字金额转为汉字金额函数声明
{
     char *danwei[15] ={"分","角","元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万"};  //钱单位
     char *hz_shuzi[10] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};  //汉字0-9
    
     static char strresult[200];  //保存转换后汉字
     double temp;          //保存输入钱数
     double base = 1.0;    //单位量整数(10,100,1000,10000...)
    
     int n = 0;    //输入的金额有多少位数
     temp = money*100.0;   
     strcpy(strresult,"转换后金额为:");
    
     if (temp <0.0)  //输入钱数为负数
     {
           strcpy(strresult,"零元零角零分 ");
     }
    
     else
     {
         /* 如输入12345 temp = 1234500
         1.base = 10, temp = 123450 n=1
         2.base = 100, temp = 12345 n=2
         3.base = 1000, temp = 1234 n=3
         4.base = 10000, temp = 123 n=4
         5.base = 100000, temp = 12 n=5
         6.base = 1000000, temp = 1 n=6
        temp<10 退出
         */
         while (temp >= 10.0)  //输入钱数大于10  计算输入钱数的位数
         {
               base = base*10;
               temp = temp/10.0;
               n++;         // 输入的金额有多少位数
         }
        
         if (n >= 15)   //位数大于15
         {
               strcpy(strresult,"输入金额超出范围了!");
         }
        
         else
         {
             /*  此时 temp=1234500 ,base = 1000000, n=6
            
             n=7;d=1; temp=234500;base=100000 strcat(strresult,hz_shuzi[1]"壹"),strcat(strresult,danwei[7]"万")
             n=6;
             ...
             */
             temp = money*100.0;
            
             for (int i=n; i>=0; i--)        //根据位数转换
             {
                 int d = (int)(temp/base);     //求每位的数字式多少
                 temp  = temp - base*(double)d;  //除去最高位数字,减一位后的的数字
                 base  = base/10.0;
    
     
                 strcat(strresult,hz_shuzi[d]); //字符连接
                 strcat(strresult,danwei[i]);
                
             }
            
         }
     }
   
    return  strresult;
     
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值