mt-procode

总访问量8117次
  • 主页
  • 归档
所有文章 关于我

mt-procode

  • 主页
  • 归档

人民币值转换问题

2020-04-14
总阅读量17次

问题描述

设计程序完成从阿拉伯数字到人民币风格的字符串转换,需完成的功能如下:
1、 由用户输入并保存一个具有两位小数的金额,单位为元;
2、 能够对用户输入的人民币金额进行输出;
3、 能够将金额数值翻译成中文的表达方式进行输出;
4、 程序不断读取用户输入,并给出两种输出,直到用户输入quit 结束执行。

注意事项:
1、用户输入纯整数或者纯小数;
2、用户输入0或者0.0或者0.00要求输出为‘’零‘’;
3、输入不是数字串或者‘quit’或者输入051.42、01.00等都为非法输入;
4、有多个零时只显示一个;
5、只有整数部分时需要后缀‘整’字样;
6、只有小数部分时整数部分的零应该省略。


问题分析

输入:
用户输入的需要转换的阿拉伯数字串或者终止程序执行的quit命令或者其它非法字符串
输出:
用户输入的待处理的字符串和(若用户输入的字符串符合处理条件)转换为RMB风格的数值表示结果
主要处理过程:
采用C风格的字符串接受用户输入判断是否满足处理要求;
(1)满足处理条件:将用户输入的字符串数组分为整数部分和小数部分进行处理并输出字符串和处理结果;
(2)结束标志‘quit’: 终止程序;
(3)非法字符串:提示用户重新输入。


流程设计

process


程序实现和测试



主要模块

1、用户输入判断模块:
主要用于判断用户输入的字符串的格式
(数字串、终止命令、非法字符串)
2、数字串转化模块:
主要用于将数字串转化为人民币风格的字符串
(整数部分转化、小数部分转化)


源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <math.h>

using namespace std;


int main()
{
//初始化计量单位和RMB风格的数字表示
char measure[][4] = {"元","拾","佰","仟","万","亿"};
char numchar[][4] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};

while(true){
//接收用户输入的字符串
int flag = 1;
char instr[30];
cin >> instr;
char* p = instr;
if(*p == '0' && (*(p+1)!='.' && *(p+1) !='\0'))
flag = 0;
else
while(*p){
if(!isdigit(*p) && *p !='.'){
flag = 0;
break;
}
p ++;
}

if(flag == 1){
//将输入的数字串转化为浮点型数据
long double num1 = atof(instr);
//获得输入的整数部分
long int sector1 = static_cast<long int>(num1);
//获得输入的小数部分
float sector2 = num1 - sector1;
//判断是否是数字串
if(fabs(sector2) < 1e-6 && sector1 == 0){
cout << "零" << endl;
continue;
}

//将存放转化数据的串初始化为空
string ostr = "";

//将整数部分再转化为字符串存放在temp字符串中
char temp[20];
ltoa(sector1,temp,10);
p = temp;
int num = strlen(temp);//整数部分位数

for(int i = 1;i <=num;i++){
if(sector1 == 0)
break;
//定义k控制数字转换和计量单位的选择
int k = (num - i) % 4;
//将正在处理的字符串的数字位转化为数值
int judgNum = *p & 15;

//数字转化部分
if(judgNum)
ostr += numchar[judgNum];
else{
if(k && (*(p+1)&15))
ostr += "零";
}

//计量单位转化
if(k){
if(judgNum)
ostr += measure[k];
}
else{
int j = num - i;
if(j)
ostr += measure[j/4 +3];
else
ostr += "元";
}
p++;
}

//处理小数部分

if(fabs(sector2) < 1e-6)
ostr += "整";
else{
p = instr;
while(*p){
if(*p == '.')
break;
p++;
}
if(*(p+1)=='0')
ostr = ostr+ numchar[*(p+2) & 15] + "分";
else{
ostr = ostr + numchar[*(p+1)&15] +"角" ;
if(*(p+2)!='\0' && *(p+2) != '0')
ostr = ostr + numchar[*(p+2)&15] + "分";
}
}

//输出源字符串和处理后字符串
cout << "primitive str: " << instr << endl << "RMB: " << ostr << endl;

}
else{
if(!strcmp(instr,"quit")){
cout << "program have been stopped!" << endl;
break;
}
else{
cout << "your's input is illegal,please input legal data! " << endl;
}
}
}

return 0;
}

测试用例

test1)test2

赏

感谢支持

支付宝
微信
  • C++
  • 算法
  • C++
  • 算法

扫一扫,分享到微信

微信分享二维码
main函数参数的简单使用
Cpp 数组和结构体
  1. 1. 问题描述
    1. 1.1. 问题分析
    2. 1.2. 流程设计
    3. 1.3. 程序实现和测试
      1. 1.3.0.1. 主要模块
      2. 1.3.0.2. 源代码
      3. 1.3.0.3. 测试用例
© 2020 mt-procode
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • C++
  • 算法
  • 语法
  • 编辑器
  • cmd
  • 类
  • 数据结构
  • C

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • C语言求解一个矩阵的转置矩阵

    2020-06-15

    #算法#C

  • 建立工资系统-v3

    2020-06-10

    #C++#类

  • PhoneBook

    2020-06-10

    #C++#类

  • IntStack

    2020-06-10

    #C++#类

  • C实现矩阵乘法计算

    2020-06-04

    #算法#C

  • n阶行列式计算

    2020-06-04

    #算法#C

  • 建立工资计算系统(2)

    2020-06-01

    #C++#类

  • IntQueue类的实现

    2020-05-23

    #C++#数据结构

  • 建立工资系统(1)-员工与工资

    2020-05-19

    #C++#算法#类

  • ObjectCounter类的实现

    2020-05-17

    #C++#算法

  • 便利店小程序Plus

    2020-05-10

    #C++#算法

  • Fan类与Rational类的简单实现

    2020-05-08

    #C++#算法

  • 商贩卖pig和电话号码组合两类简单问题的求解

    2020-04-28

    #C++#算法

  • 十进制向二进制转化的两种方法

    2020-04-22

    #C++#算法

  • 两个有序数组的合并问题

    2020-04-22

    #C++#算法

  • 全局变量和局部变量

    2020-04-22

    #语法

  • 便利店小程序

    2020-04-22

    #C++#算法

  • 控制台标题、大小、前景色和背景色的两种改变方式

    2020-04-22

    #cmd

  • main函数参数的简单使用

    2020-04-22

    #C++#语法

  • 人民币值转换问题

    2020-04-14

    #C++#算法

  • Cpp 数组和结构体

    2020-04-03

    #C++#算法

  • 学生成绩管理小程序

    2020-03-31

    #C++#算法

  • Cpp 指针和引用的区别

    2020-03-31

    #C++#语法

  • 约瑟夫环问题

    2020-03-31

    #C++#算法

  • 如何找出int数组中只出现一次的两个元素(其它所有元素都出现了两次)?

    2020-03-31

    #C++#算法

  • 蒙特卡洛算法应用 --- 估算圆周率

    2020-03-31

    #C++#算法

  • MarkDown的简单使用及介绍

    2020-03-31

    #编辑器

学生党一枚~