现在的位置: 首页 > 综合 > 正文

数字金额转换为汉字形式

2013年09月13日 ⁄ 综合 ⁄ 共 2168字 ⁄ 字号 评论关闭
数字金额转换大写汉字

/*

思路:  根据输入的数字大小确认 数字的是几位数 以及位数的单位量 比如输入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;
     
}

抱歉!评论已关闭.