#include<stdio.h>
#include<string.h>
char *ds[]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char *as[]={"","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"};
#define M 50
int pw[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
void trans(long n)
{
char st[M];
int i, t;
bool flag = false; //是否是万位或者亿位
bool has0 = false; //是否中间有零
bool first = true; //是否是第一位数
st[0]=0;
if( n < 0 ) return ;
if(n==0) { printf("%s/n",ds[0]); return ; }
for(i=9;i>=0;i--)
{
t=n/pw[i];
if(t)
{
first=false;
if( has0 ) strcat(st, ds[0]); //中间有零,写一个“零”
has0=false;
flag=true;
strcat(st, ds[t]);
strcat(st, as[i]);
}
else
{
if(!first) has0 = true; //不是前面的无关的,则要标志一下
}
if(i==4 || i==8)
{
if(flag && 0==t)strcat(st,as[i]);
flag=false;
}
n=n%pw[i];
}
printf("%s/n",st);
}
int main()
{
long n;
while(scanf("%d",&n)!=EOF)
{
trans(n);
}
return 0;
}
原文: