您的位置:首页 > 其它

数字金额转换为汉字形式

2010-07-28 13:44 330 查看
数字金额转换大写汉字



/*

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐