| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3248 人关注过本帖
标题:【福利贴】【阿拉伯数字小写金额转换成中文大写金额】【给那些需要的人吧】
只看楼主 加入收藏
zjy2wyl
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2011-8-16
结帖率:100%
收藏
 问题点数:0 回复次数:5 
【福利贴】【阿拉伯数字小写金额转换成中文大写金额】【给那些需要的人吧】
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

#define N 30 //30是因为怕数组越界
void rmb_units(int k);
void big_write_num(int l);
void time_print(void);
void main()
    {
        char c[N],*p;
        int a,i,j,len,len_integer=0,len_decimal=0;   //len_integer整数部分长度,len_decimal小数部分长度
        printf("----------------------------------------*---------------------------------------\n");
        printf("*****|-----------*本程序将阿拉伯数字小写金额转换成中文大写金额*-----------|*****\n");
        printf("----------------------------------------*---------------------------------------\n\n");
       
        printf("现在时间为 ");time_print();   //输出当前年月日

        printf("请输入金额小写 (阿拉伯数字): ¥");
        scanf("%s",c);
        printf("\n\n");
        p=c;
        len=strlen(p);

        /*求出整数部分的长度*/
        for(i=0;i<=len-1 && *(p+i)<='9' && *(p+i)>='0';i++);
        if(*(p+i)=='.' || *(p+i)=='\0')   //*(p+i)=='\0'没小数点的情况
            len_integer=i;
        else
            {
               printf("\n\n!!!!---------# Error: 输入有错误,整数部分含有错误的字符!---------!!!!\n\n");
               system("pause");
               exit(EXIT_FAILURE);
            }
        if(len_integer>13)
            {
               printf("!---------------超过范围,最大万亿!整数部分最多位!程序暂停!---------------!\n");
               system("pause");
               printf("\n!---------程序继续执行,注意:超过万亿部分只是简单读出数字的中文大写!----------!\n\n");
            }
        printf("\n===================================转换开始!===================================\n\n");
        printf("¥%s 的中文大写金额如下所示:\n\n人民币/RMB ",c);
       
        /*转换整数部分*/
        for(i=0;i<len_integer;i++)
            {
                a=*(p+i)-'0';
                if(a==0)
                    {
                        if(i==0)
                            {
                                if(*(p+1)!='.' && *(p+1)!='\0' && *(p+1)!='0')
                                    {
                                       printf("\n\n!------------输入有错误!第一位为而后整数部分有非字符,请检查!---=--------!\n\n");
                                       system("pause");
                                       printf("\n!--------------程序继续执行,注意:整数部分的剩下部分将被忽略!----------------!\n\n");
                                    }
                                printf("零圆");
                                break;   //若第一个是则忽略其他整数部分
                            }
                        else if(*(p+i+1)!='0' && i!=len_integer-5 && i!=len_integer-1 && i!=len_integer-9) 
                            //圆、万、亿位时选择不加零                           {
                            {
                                 printf("");
                                 continue;                           
                            }
                       
                        else if(i==len_integer-1 || i==len_integer-5 || i==len_integer-9)   //圆万亿单位不能掉
                            {
                                 rmb_units(len_integer+1-i);
                                 continue;
                            }
                        else
                                 continue;
                     }
               big_write_num(a);              //阿拉伯数字中文大写输出
                rmb_units(len_integer+1-i);   //人民币货币单位中文大写输出
           }
        /*求出小数部分的长度*/
        len_decimal=len-len_integer-1;
        if(len_decimal<0)
            {
                len_decimal=0;
                printf("");   //或正
            }
        if(len_decimal>2)      //只取两位小数
                len_decimal=2;
        //printf("%d----%d-----%d\n",len,len_integer,len_decimal);
        p=c;
        /*转换小数部分*/
        for(j=0;j<len_decimal;j++)    
            {
                a=*(p+len_integer+1+j)-'0';    //定位到小数部分,等价于a=*(p+len-len_decimal+j)-'0';
                if(a<0 || a>9)
                    {
                        printf("\n\n!!!!---------# Error: 输入有错误,小数部分含有错误的字符!---------!!!!\n\n");
                        system("pause");
                        exit(EXIT_FAILURE);
                    }
                if(a==0)
                    {
                        if(j+1<len_decimal)
                         {
                             if(*(p+len_integer+j+2)!='0')      
                                printf("");
                             else
                                {
                                 printf("");
                                 break;
                                 }
                         }
                          continue;
                     }
                big_write_num(a);
                rmb_units(1-j);
            }
        printf("\n\n");
        printf("===================================转换完成!===================================\n\n");
        system("pause");       
    }
   
    /*人民币货币单位中文大写输出*/
    void rmb_units(int k)
      {
         //相当于const char rmb_units[]="fjysbqwsbqisbqw";
         //"分角圆拾佰仟万拾佰仟亿拾佰仟万";
          switch(k)
              {
                   case 3:case 7:case 11: printf("");break;
                   case 4:case 8:case 12: printf("");break;
                   case 5:case 9:case 13: printf("");break;
                   case 6: case 14:       printf("");break;
                   case 10:               printf("亿");break;
                   case 2:                printf("");break;
                   case 1:                printf("");break;
                   case 0:                printf("");break;
                   default:               break;
              }
      }
    /*阿拉伯数字中文大写输出*/
    void big_write_num(int l)
      {
        //相当于const char big_write_num[]="0123456789";
        //"零壹贰叁肆伍陆柒捌玖"
        switch(l)
             {
                  case 0:printf("");break;
                  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;
                  default:break;
             }
      }
    /*输出当前年月日,相关类型和函数声明参见<time.h>*/
    void time_print(void)
      {
         time_t rawtime;   
         struct tm * timeinfo;
         time ( &rawtime );    //获取时间
         //printf("%d",rawtime);
         timeinfo = localtime ( &rawtime );//转换为当地时间tm结构
         //直接打印tm结构的元素,tm_year从1900年计算,所以要加1900,月tm_mon,从0计算,所以要加1
         printf ( "%d年%02d月%02d日\n\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday);
      }
搜索更多相关主题的帖子: 中文大写 阿拉伯 
2011-08-21 14:05
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
顶一个先,还是热的沙发
2011-08-21 14:21
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:0 
顶一个先,还是热的板凳

一个单片机就让我头疼不已~~~
2011-08-22 10:08
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:0 
金额转换成中文大写.rar (10.12 KB)

被我改成彩色版的了,并且加入了很多容错的代码,楼主顶你哦~~~~
2011-08-22 21:38
饭桶
Rank: 6Rank: 6
等 级:侠之大者
帖 子:165
专家分:422
注 册:2011-4-5
收藏
得分:0 
顶!

人得一生得奋斗!
2011-08-22 21:50
q24077735
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-8-22
收藏
得分:0 
LZ的我这边编译时报错,我修改了下。我是新手,不知道改后有没有错误。
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 #include<string.h>

 #include<time.h>

#define N 30 //30是因为怕数组越界

 void rmb_units(int k);

 void big_write_num(int l);

 void time_print(void);

 main()
     {
         char c[N],*p;
         int a,i,j,len,len_integer=0,len_decimal=0;   //len_integer整数部分长度,len_decimal小数部分长度
         printf("----------------------------------------*---------------------------------------\n");
         printf("*****|-----------*本程序将阿拉伯数字小写金额转换成中文大写金额*-----------|*****\n");
         printf("----------------------------------------*---------------------------------------\n\n");
      
        printf("现在时间为 ");time_print();   //输出当前年月日

        printf("请输入金额小写 (阿拉伯数字): ¥");
         scanf("%s",c);
         printf("\n\n");
         p=c;
         len=strlen(p);

        /*求出整数部分的长度*/
         for(i=0;i<=len-1 && *(p+i)<='9' && *(p+i)>='0';i++);
         if(*(p+i)=='.' || *(p+i)=='\0')   //*(p+i)=='\0'没小数点的情况
             len_integer=i;
         else
             {
                printf("\n\n!!!!---------# Error: 输入有错误,整数部分含有错误的字符!---------!!!!\n\n");
                system("pause");
                exit(EXIT_FAILURE);
             }
         if(len_integer>13)
             {
                printf("!---------------超过范围,最大万亿!整数部分最多位!程序暂停!---------------!\n");
                system("pause");
                printf("\n!---------程序继续执行,注意:超过万亿部分只是简单读出数字的中文大写!----------!\n\n");
             }
         printf("\n===================================转换开始!===================================\n\n");
         printf("¥%s 的中文大写金额如下所示:\n\n人民币/RMB ",c);
      
        /*转换整数部分*/
         for(i=0;i<len_integer;i++)
             {
                 a=*(p+i)-'0';
                 if(a==0)
                     {
                         if(i==0)
                             {
                                 if(*(p+1)!='.' && *(p+1)!='\0' && *(p+1)!='0')
                                     {
                                        printf("\n\n!------------输入有错误!第一位为而后整数部分有非字符,请检查!---=--------!\n\n");
                                        system("pause");
                                        printf("\n!--------------程序继续执行,注意:整数部分的剩下部分将被忽略!----------------!\n\n");
                                     }
                                 printf("零圆");
                                 break;   //若第一个是则忽略其他整数部分
                             }
                         else if(*(p+i+1)!='0' && i!=len_integer-5 && i!=len_integer-1 && i!=len_integer-9)
                            //圆、万、亿位时选择不加零                           {
                             {
                                  printf("");
                                  continue;                         
                             }
                      
                         else if(i==len_integer-1 || i==len_integer-5 || i==len_integer-9)   //圆万亿单位不能掉
                             {
                                  rmb_units(len_integer+1-i);
                                  continue;
                             }
                         else
                                  continue;
                      }
                big_write_num(a);              //阿拉伯数字中文大写输出
                 rmb_units(len_integer+1-i);   //人民币货币单位中文大写输出
            }
         /*求出小数部分的长度*/
         len_decimal=len-len_integer-1;
         if(len_decimal<0)
             {
                 len_decimal=0;
                 printf("");   //或正
             }
         if(len_decimal>2)      //只取两位小数
                 len_decimal=2;
         //printf("%d----%d-----%d\n",len,len_integer,len_decimal);
         p=c;
         /*转换小数部分*/
         for(j=0;j<len_decimal;j++)  
            {
                 a=*(p+len_integer+1+j)-'0';    //定位到小数部分,等价于a=*(p+len-len_decimal+j)-'0';
                 if(a<0 || a>9)
                     {
                         printf("\n\n!!!!---------# Error: 输入有错误,小数部分含有错误的字符!---------!!!!\n\n");
                         system("pause");
                         exit(EXIT_FAILURE);
                     }
                 if(a==0)
                     {
                         if(j+1<len_decimal)
                          {
                              if(*(p+len_integer+j+2)!='0')    
                                 printf("");
                              else
                                 {
                                  printf("");
                                  break;
                                  }
                          }
                           continue;
                      }
                 big_write_num(a);
                 rmb_units(1-j);
             }
         printf("\n\n");
         printf("===================================转换完成!===================================\n\n");
         system("pause");     
    }
  
     /*人民币货币单位中文大写输出*/
     void rmb_units(int k)
       {
          //相当于const char rmb_units[]="fjysbqwsbqisbqw";
          //"分角圆拾佰仟万拾佰仟亿拾佰仟万";
           switch(k)
               {
                    case 3:case 7:case 11: printf("");break;
                    case 4:case 8:case 12: printf("");break;
                    case 5:case 9:case 13: printf("");break;
                    case 6: case 14:       printf("");break;
                    case 10:               printf("亿");break;
                    case 2:                printf("");break;
                    case 1:                printf("");break;
                    case 0:                printf("");break;
                    default:               break;
               }
       }
     /*阿拉伯数字中文大写输出*/
     void big_write_num(int l)
       {
         //相当于const char big_write_num[]="0123456789";
         //"零壹贰叁肆伍陆柒捌玖"
         switch(l)
              {
                   case 0:printf("");break;
                   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;
                   default:break;
              }
       }
     /*输出当前年月日,相关类型和函数声明参见<time.h>*/
     void time_print(void)
       {
          time_t rawtime; 
          struct tm * timeinfo;
          time ( &rawtime );    //获取时间
          //printf("%d",rawtime);
          timeinfo = localtime ( &rawtime );//转换为当地时间tm结构
          //直接打印tm结构的元素,tm_year从1900年计算,所以要加1900,月tm_mon,从0计算,所以要加1
          printf ( "%d年%02d月%02d日\n\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday);
       }
2011-08-23 22:46
快速回复:【福利贴】【阿拉伯数字小写金额转换成中文大写金额】【给那些需要的人 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027236 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved