输入一个人民币小写金额值,转化为大写金额值输出。
#include<stdio.h>#include<string.h>
void main()
{
char digit[][3]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
char place[][3]={"","拾","佰","仟","万","亿","角","分"};
char sum_mon[44][3];/*定义存放大写钱数的二维数组*/
int num[20],s;
int i,j,k,m,flag=1,len,sum;
double money,dec_mon;
unsigned long int_mon;
printf("input money(0~4294967295.99):\n");
scanf("%lf",&money);
int_mon=(unsigned long)money;
dec_mon=money-(double)int_mon;
for(i=1;i<=20;i++)
{
num[i-1]=int_mon%10;
int_mon=int_mon/10;
}
for(j=0,i=19;i>=j;i--)
{
if((num[i]!=0)&&(flag==1))
{
flag=0;
sum=i+1;/*整数部分位数*/
}
if(flag==0)
{
s=num[i];
num[i]=num[j];
num[j]=s;
j++;
}
} /*整数部分转换为字符数组*/
switch(sum/4)
{
case 0:k=sum%4;
for(i=num[0],j=0,s=0,m=k-1;j<k;j++,m--,i=num[j])
{
strcpy(sum_mon[s],digit[i]);/*把相应位的大写给sum_mon[][3]*/
strcpy(sum_mon[s+1],place[m]);/*在相应位大写后面加上位名*/
s=s+2;
} /*输入的整数部分位小于4*/
strcpy(sum_mon[s-1],"元");
break;
case 1:k=sum%4;
for(i=num[0],j=0,s=0,m=k-1;j<k;j++,m--,i=num[j])
{
strcpy(sum_mon[s],digit[i]);
strcpy(sum_mon[s+1],place[m]);
s=s+2;
}
if(k!=0)
strcpy(sum_mon[s-1],place[4]);/*把万给二维数组*/
strcpy(sum_mon[s],digit[num[k]]);
strcpy(sum_mon[s+1],place[3]);/*把千位数和仟给数组*/
for(i=num[k+1],j=0,s=s+2,m=2;j<3;j++,m--,i=num[j+k+1])
{
strcpy(sum_mon[s],digit[i]);
strcpy(sum_mon[s+1],place[m]);
s=s+2;
}
strcpy(sum_mon[s-1],"元");
break; /*输入的整数部分位数小于8*/
case 2:k=sum%4;
for(i=num[0],j=0,s=0,m=k-1;j<k;j++,m--,i=num[j])
{
strcpy(sum_mon[s],digit[i]);
strcpy(sum_mon[s+1],place[m]);
s=s+2;
}
if(k!=0)
strcpy(sum_mon[s-1],place[5]);/*把亿给二维数组*/
strcpy(sum_mon[s],digit[num[k]]);
strcpy(sum_mon[s+1],place[3]);
for(i=num[k+1],j=0,s=s+2,m=2;j<3;j++,m--,i=num[j+k+1])
{
strcpy(sum_mon[s],digit[i]);
strcpy(sum_mon[s+1],place[m]);
s=s+2;
}
strcpy(sum_mon[s-1],place[4]);
strcpy(sum_mon[s],digit[num[k+4]]);
strcpy(sum_mon[s+1],place[3]);
for(i=num[k+1+4],j=0,s=s+2,m=2;j<3;j++,m--,i=num[j+k+1+4])
{
strcpy(sum_mon[s],digit[i]);
strcpy(sum_mon[s+1],place[m]);
s=s+2;
}
strcpy(sum_mon[s-1],"元");
break;/*输入的整数部分位数小于12*/
}
len=2*sum;
for(k=0,i=0,j=0;i<2;i++,j=j+2)
{
dec_mon=dec_mon*10;
k=((int)dec_mon)%10;
strcpy(sum_mon[len+j],digit[k]);
strcpy(sum_mon[len+j+1],place[i+6]);
}/*小数部分*/
for(i=0;i<len+4;i++)
printf("%s",sum_mon[i]);/*输出大写字符*/
getch();
}
那位高手帮忙看一下怎么回事,输出的结果怎么有时对有时差0.01呢?红色部分双精度浮点型转换为整型的时候怎么有时错误,比方说6.00就转换为5???
先谢谢了、、我看了老久也没看出来