zoukankan      html  css  js  c++  java
  • 人民币大小写

    代码写得有些乱 不准备修改了。

    注释仅供参考,可能表述错误。

      1 /*
      2 **程序通过控制MAX,X的大小&c[]的内容实现扩展程序的整数位转换上限 c[]要和MAX的对应,否则出错
      3 **小数3位有效,四舍五入。由于程序限制不能更改长度,转换两位
      4 **a,b,d数组不可变
      5 */
      6 
      7 #include <stdio.h>
      8 #include <string.h>
      9 #include <stdlib.h>
     10 #define MAX    13         /* 四舍五入后的上限{13个9}.994   10的13次幂溢出  ★★可变  当前最大32*/
     11 #define X    1024       /* 存储数字的数组长度 1024个数字字符 ★★可变*/
     12 char    *a[10] = { "", "", "", "", "", "", "", "", "", "" };
     13 char    *b[5] = { "", "", "", "", "" };
     14 char    *c[8] = { "", "", "亿", "", "", "", "", "" };      /* 穰=10的28次幂   ★★可变 */
     15 char    *d[4] = { "", "", "", "" };
     16 
     17 int main()
     18 {
     19     int    i        = 0;
     20     int    j        = 0;
     21     int    zero    = 0;
     22     int    ge        = 0;
     23     int    shu        = 0;
     24     int    yu        = 0;
     25     int    pos        = 0;
     26     int    shang    = 0;
     27     int    dot_ge    = 0;
     28     int    zheng_ge= 0;
     29     int    xiao_ge    = 0;
     30     char    num[X]         = "0"; /* 预留一位用来进位 */
     31     char    result[X * 5]= "人民币";
     32 
     33     printf( "请输入" );
     34     scanf( "%s", num + 1 );/* 预留一位用来进位 */
     35 
     36     /**过滤输入**/
     37     for (; i < X && num[i] != 0; i++ ) {
     38         
     39         if ( num[i] >= '0' && num[i] <= '9' )
     40             if ( dot_ge == 0 )
     41                 zheng_ge++;
     42             else
     43                 xiao_ge++;
     44         else if ( num[i] == '.' ) {
     45             dot_ge++;    
     46         
     47         } else {
     48             puts( "非法输入" );
     49             return(main() );
     50         }
     51         if ( dot_ge >= 2 || xiao_ge    >3) {
     52             puts( "非法输入" );
     53             return(main() );
     54         }
     55     }
     56 
     57     /**格式化&取小数点2位**/
     58     i = -1;
     59     if ( num[zheng_ge + 3] >= '5' && xiao_ge > 2 ) {
     60         num[zheng_ge + 2]++;
     61         if ( num[zheng_ge + 2] > '9' ) {
     62             num[zheng_ge + 1]++;
     63             num[zheng_ge + 2] = '0';
     64         }
     65         if ( num[zheng_ge + 1] > '9' ) {
     66             num[zheng_ge + 1]    = '0';
     67             i            = zheng_ge - 1;
     68         }
     69 
     70         for (; i >= 0; i-- ) {
     71             num[i]++;
     72             if ( num[i] > '9' ) {
     73                 num[i] = '0';
     74             } else {
     75                 break;
     76             }
     77         }
     78     }
     79     num[zheng_ge + 3] = 0; /* 小数点截取两位 */
     80 
     81     /**溢出判断**/
     82     i = 0;
     83     while ( num[i++] == '0' )
     84         ;
     85     /*    printf("%s  %d   %d
    ",num, zheng_ge,i); */
     86     if ( zheng_ge - i  >= MAX ) {
     87         puts( "数值溢出" );
     88         return(main() );
     89     }
     90 
     91     /**转换整数部分**/
     92     i    = 0;
     93     j    = 0;
     94     zero= 0;
     95     ge    = 0;
     96     shu    = 0;
     97 
     98 
     99     while ( num[i++] == '0' && i<zheng_ge)
    100         ;               /* 去首部0 */
    101     if(i==zheng_ge)
    102             strcat( result, a[0] );
    103     //printf("1  %s i %d   j%d    ge%d  shang%d pos%d     %d
    ",num,i,j,ge,shang,pos,zheng_ge-pos);     
    104     pos    = --i;          /* 对数组*/
    105     j    = 0;              /* 重新*/
    106     i    = 0;            /* 定位 */
    107     yu    = (zheng_ge - pos) % 4;    /*不足四位的那一组*/ 
    108     shang    = (zheng_ge - pos) / 4;    /*几组4*/
    109     //printf("1  %s i %d   j%d    ge%d  shang%d pos%d     %d
    ",num,i,j,ge,shang,pos,zheng_ge-pos); 
    110     for (; j <= shang; j++ ) {/*周期*/ 
    111         ge = j * 4 + yu;
    112     //        printf("i %d   j%d    ge%d  shang%d pos%d
    ",i,j,ge,shang,pos); 
    113         zero = 0;
    114         for (; i < ge; i++ ) {/*四位一循环周期*/ 
    115             shu = (num + pos)[i] - '0';
    116             if ( shu == 0 ) {
    117                 if ( (num + pos)[i + 1] == '0' || i == ge - 1 ) {
    118                     zero++;
    119                     continue;
    120                 } else
    121                     strcat( result, a[0] );
    122             } else {
    123                 strcat( result, a[shu] );
    124                 strcat( result, b[ge - i] );
    125             }
    126         }
    127         if ( zero != 4 && ge > 0 )
    128             strcat( result, c[shang - j] );
    129     }
    130     strcat( result, d[1] );
    131 
    132     /**转换小数部分**/
    133     if ( atoi( num + zheng_ge + 1 ) == 0 )
    134         strcat( result, d[0] );
    135     else {
    136         if ( num[zheng_ge + 1] != 0 ) {
    137             strcat( result, a[num[zheng_ge + 1] - '0'] );
    138             strcat( result, d[2] );
    139         } else
    140             strcat( result, a[0] );
    141 
    142 
    143         if ( num[zheng_ge + 2] != 0 ) {
    144             strcat( result, a[num[zheng_ge + 2] - '0'] );
    145             strcat( result, d[3] );
    146         }
    147     }
    148 
    149     /**输出结果**/
    150     i=0; 
    151     while ( num[i++] == '0' && i<zheng_ge)
    152         ;
    153     printf( "¥%s  ",  num + i-1 );
    154     puts( result );
    155     printf("
    
    
    ");
    156     main();
    157     return 0;
    158 }

  • 相关阅读:
    ASP.NET Core
    ASP.NET Core
    ASP.NET Core
    ASP.NET Core
    通用查询设计思想(2)- 基于ADO.Net的设计
    API接口通讯参数规范(2)
    Centos7 安装selenium(python3.7 centos7 )
    mysql (create temporary table table_name )临时表创建
    C# 字符串 String、StringBuffer和StringBuilder的区别
    安装Elasticsearch
  • 原文地址:https://www.cnblogs.com/startnow/p/6621952.html
Copyright © 2011-2022 走看看