将阿拉伯数字转变为中文大写数字

这个题对我这个新手菜鸡来说有点难了,因此查找一下资料,借鉴了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@)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值