//这个可以
//程序把数字转成汉字金额数字
#include <iostream>
#include <string>
using namespace std;
void hz(string);
inline string getnum(string);
inline string getys(int);
int main(void)
{
string str1="";
do
{
if(str1!="") cout<<"当前输入数字为"<<str1.length()<<endl;
cout<<"请输入最多13位数字,输入-1结束:";
cin>>str1;
}while(str1.length()>13 && str1!="-1");
if(str1 != "-1") hz(str1);
return 0;
}
string getnum(string c) //得到数字对应汉字
{
string hz1="0零1一2二3三4四5五6六7七8八9九";
return hz1.substr(hz1.find(c,0)+1,2);
}
string getys(int i) //得到数字位数
{
string hz2="零元十百千万十百千亿十百千万兆";
return hz2.substr(i+i,2);
}
void hz(string zw)
{
int i;
int k=zw.length()-1; //-1是为了和下面配合zw.substr函数
string c; //保存zw某位数字
string viewhz="";
bool zero=false; //0标志
bool wa=false; //万标志
bool yi=false; //亿标志
for(i=1;i<=zw.length();++i,--k)
{
c=zw.substr(k,1); //从倒数开始截取右边一位数
if(c=="0")
{
if(zero==false) //为f表示是第一次必须加零,t表示是连续0比如100002中4个0中某个
{
zero=true;
viewhz="零"+viewhz;
}
}
else //不是0是其它数字
{
zero=false; //0标志清空
switch(i) //判断位数
{
case 5: //万位
wa=true;break; //表示(万位不是0的数字)
case 6: //十万
case 7: //百万
case 8: //千万
if(wa==false) //如果万位是0(wa如果为T表示万位是数字,否则为0)
{
viewhz="万"+viewhz;
wa=true;
}
break;
case 9:
yi=true;break; //亿标志
case 10: //十亿
case 11: //百亿
case 12: //千亿
case 13: //万亿
if(yi==false) //yi这个标志没被用过
{
viewhz="亿"+viewhz;
yi=true;
}
break;
}
viewhz=getnum(c)+getys(i)+viewhz; //得到数字对应大写金额+所在的位数
}
}
cout<<viewhz<<endl;
}