这个题对我这个新手菜鸡来说有点难了,因此查找一下资料,借鉴了blacknet99的思想,下面是源码。
//函数嵌套调用
#include<stdio.h>
#define ZERO_TRUE 1 //上一个有0
#define ZERO_FALSE 2 //数值无关,只做判断条件
void panduan(int );
int shuzi(int num);
void qian(int );
void bai(int ,int );
void shi(int ,int );
void ge(int ,int );
int main()
{
int num;
scanf("%d",&num);
if(num==0)
printf("零");
panduan(num);
return 0;
}
void panduan(int num)
{
if(num>999)
qian(num);
else if(num>99)
bai(num,ZERO_FALSE);
else if (num > 9)
shi (num,ZERO_FALSE);
else
ge(num,ZERO_FALSE);
}
void qian(int num )
{
if(0 == num/1000)
bai(num-1000*(num/1000),ZERO_TRUE); //本位是0
else
{ //本位不是0
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)
{
printf("");
}
else
{
if( ZERO_TRUE == zero ) printf("零");
shuzi(num);
}
}
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;
}
}
来简单的讲解一下
这个代码主要应用函数的嵌套调用,很有助于开拓思路。
首先宏定义两种情况:
1.本位是0
2.本位非0
之后判断位数,进入相应的函数,函数调用了下一位的函数,其中重点是对0的判断,依此类推。
这个代码给出的是9999以内的数的运算,同样再定义几个函数也可以扩大位数。
希望文章对大家有所帮助 (@o@)