自己试着写了些,测试了一下没发现问题,欢迎批评指正。
#include <iostream>
#include <stack>
using namespace std;
void changenum(long num,char**a,int &len_a); //将数字num转化为汉字表示,len_a+1表示转换后a中汉字的实际个数
void main()
{
long num;
cin>>num;
char *a[100];
int i=0;
int len_a;
changenum(num,a,len_a);
while(i<=len_a)
{
cout<<*(a+i);
i++;
}
cout<<endl;
}
void changenum(long num,char**a,int &len_a)
{
if(num==0)
{
*a="零";
len_a=0;
return;
}
stack<int> s;
long temp=num;
int factor=10;
char *str1[]={"壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char *str2[]={"拾","佰","仟","万","拾","佰","仟","亿"};
int ssize,i;
while(temp>=10)
{
s.push(temp%10);
temp=temp/10;
}
if(temp%10>0)
s.push(temp);
ssize=s.size();
i=0;
while(!s.empty())
{
if(s.top()!=0)
{
if(ssize>=2)
{
*(a+i)=str1[s.top()-1];
i++;
*(a+i)=str2[ssize-2];
i++;
ssize--;
s.pop();
}
else
{
*(a+i)=str1[s.top()-1];
i++;
s.pop();
ssize--;
}
}
else
{
while(ssize>=0&&s.top()==0)
{
if(ssize==0)
break;
else
{
if(ssize==9)
{
*(a+i)=str2[ssize-2];
i++;
}
if(ssize==5)
{
*(a+i)=str2[ssize-2];
i++;
}
s.pop();
ssize--;
}
}
*(a+i)="零";
i++;
}
}
len_a=i-1;
}