//这个可以
//程序把数字转成汉字金额数字
#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;
}