C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码

C语言 阿拉伯数字转换为汉语大写数字金额程序分析及源码

数据结构:用一个整型变量储存输入数字   大家可能会感觉用字符串取位更方便一些··
但是相应的,字符串失去了数字原有的意思 00100和100对于整型变量来说是一样的 
可要是让字符串获取还要有更麻烦的分析才能实现整型变量一个赋值就搞定的事
算法:
从最高位到最低位依次打印,穿插拾万仟佰拾,对最灵活的“零”特殊照顾,最后打印“圆整
依次打印:
五个函数 void shiwan(int );void wan(int );void qian(int );void bai(int ,int );void shi(int ,int );void ge(int ,int );
函数嵌套调用 例如输入100 会调用bai();shi();ge();三个函数 其中bai();调用shi(); shi();调用ge();以此类推
通过void fpanduan() 按输入数字的位数调用

关键:要后输出0:后一位确定有非0数字后在输出前一个0
因为如果先输出0 的话 100会输出成壹佰零元整··多一个零
可是如何后输出0呢?如果本位是0 那就告诉下一位的函数:我是零 你不是零就提前输出一个零再输出你的,你要是0就告诉下一位···以此类推
废话少说 上源码

#include 
#define ZERO_TRUE  0  //上一个有0
#define ZERO_FALSE 1

void welcome	();			//欢迎欢迎~~ 
void fpanduan	(int );		//判断数字位数 ,调用相应函数 
int shuzi	(int  );	//打印数字专用 
void shiwan	(int );		
void wan	(int );		
void qian	(int );
void bai	(int ,int );
void shi	(int ,int );
void ge		(int ,int );
int main()
{
	int num;
	welcome();
	while(1)		//无限循环~想停点叉~ 
	{
		printf("---------------------------------------------------\n");
		printf("输入阿拉伯数字\t999999>输入数字>-999999\n");
		scanf("%d",&num);
		fpanduan(num);
	} 
}
void welcome()
{
	printf("---------------------------------------------------\n");
	printf("\t程序功能:转换阿拉伯数字为汉语大写数字\n");
	printf("\t最大支持:999999>输入数字>-999999\n");
	printf("\t结束程序:请直接点叉\n");
	printf("\t开发人员:blacknet EMail:[email protected]\n");
	printf("---------------------------------------------------\n");
} 
void fpanduan(int num)
{
	if		(num > 999999)	{printf("太大了啊!请重新输入\n");return;}
	else if	(num > 99999)	{shiwan	(num);}
	else if	(num > 9999)	{wan	(num);}
	else if (num > 999)	{qian	(num);}			//直接调用预设无0
	else if (num > 99)	{bai	(num,ZERO_FALSE);}
	else if (num > 9)	{shi	(num,ZERO_FALSE);}
	else if (num > -1)	{ge		(num,ZERO_FALSE);}
	else 			{printf("负"); fpanduan(-num);}	//负的就是多输出个负 
	return;
}
void shiwan(int num)
{
	shuzi(num/100000);//int截断保留十万位,NULL调用shuzi函数 
	printf("拾");
	wan(num-100000*(num/100000));	// num减掉十万位 传给wan函数 
}
void wan(int num)
{
	shuzi(num/10000);	
	printf("万");
	qian(num-10000*(num/10000));	
}
void qian(int num )
{

	if(0 == num/1000){bai(num-1000*(num/1000),ZERO_TRUE);}		//告诉百位千位是0 
	else 
	{
		shuzi(num/1000);
		printf("仟");
		bai(num-1000*(num/1000),ZERO_FALSE);
	}	//
}
void bai(int num ,int zero)
{
	if(0 == num/100 ){shi(num-100*(num/100),ZERO_TRUE);}
	else
	{
		if( ZERO_TRUE == zero ) printf("零");
		shuzi(num/100);
		printf("佰");
		shi(num-100*(num/100),ZERO_FALSE);
	}
}
void shi(int num ,int zero)
{
	if(0 == num/10  ){ge(num-10*(num/10),ZERO_TRUE);}
	else 
	{
		if( ZERO_TRUE == zero ) printf("零");
		shuzi(num/10);
		printf("拾");
		ge(num-10*(num/10),ZERO_FALSE);
	}
}
void ge(int num ,int zero)
{
	if(0 == num)	{ ;} //如果是0 只输出 圆整
	else 
	{
		if( ZERO_TRUE == zero ) printf("零");
		shuzi(num);
	}
	printf("圆整\n");
}
int shuzi(int num)		//只负责打印数字 
{
		switch(num)
	{
		case 1 :{printf("壹") ;break;}
		case 2 :{printf("贰") ;break;}
		case 3 :{printf("叁") ;break;}
		case 4 :{printf("肆") ;break;}
		case 5 :{printf("伍") ;break;}
		case 6 :{printf("陆") ;break;}
		case 7 :{printf("柒") ;break;}
		case 8 :{printf("捌") ;break;}
		case 9 :{printf("玖") ;break;}
	}	
}
新手学C,欢迎猛喷~

原创,转载请保留我的信息,否则会得尖锐湿疣~~

blacknet 

15-01-20

for beibei

你可能感兴趣的:(c)