货币求和
来源:互联网 发布:足球卡牌手游 知乎 编辑:程序博客网 时间:2024/04/29 18:51
1.题目
给出一列标准格式的货币数字,清计算出它们的总和。
我们定义货币使用下面的格式:
(1) 货币以”$”符号打头;
(2) 如果货币小于1,则整数部分是一个”0”;
(3) 货币都有两位小数;
(4) 货币的小数点左边的每三位都用逗号隔开位一组(最左边的一组可能是一位或两位数字)。
2. 输入描述
输入数据包含多个测设案例。每个测设案例的第一行是一个整数
3. 输出描述
对于每个测设案例,输出货币的总和。
4. 输入样例
2
$
$
3
$
$
$
0
5. 输出案例
$
$
解答:本题看起来简单,但实际处理起来需要注意很多细节。需要进行字符串处理、进位处理、反转容器算法、输出格式处理。代码如下:
//Coins.cpp
#include <fstream>#include <iostream>#include <string>#include <map>using namespace std;int main(int argc, char* argv[]) { //ifstream cin("aaa.txt"); string sa, sb, t; int pa, pb, pc; //定义映照容器 map<char, int>m; m['0'] = 0; m['1'] = 1; m['2'] = 2; m['3'] = 3; m['4'] = 4; m['5'] = 5; m['6'] = 6; m['7'] = 7; m['8'] = 8; m['9'] = 9; //定义映照容器 map<int, char>mm; mm[0] = '0'; mm[1] = '1'; mm[2] = '2'; mm[3] = '3'; mm[4] = '4'; mm[5] = '5'; mm[6] = '6'; mm[7] = '7'; mm[8] = '8'; mm[9] = '9'; int n, i, j; //进位标记,0表示无进位,1表示有进位 int flag = 0; while (cin >> n) { if (n == 0)break; for (i = 0; i < n; i++) { cin >> sb; //删除"$"符号 sb.erase(0, 1); //删除","符号 t = ""; for (j = 0; j < sb.size(); j++) { if (sb[j] != ',') t += sb[j]; } sb = t; //反转字符 reverse(sb.begin(), sb.end()); //删除"."符号 sb.erase(2, 1); //读入的是第一个字符串 if (i == 0) sa = sb; //sa+sb else { //进位标志设为0,即无进位 flag = 0; //把长的字符串放到sa里 if (sa.size() < sb.size()) { t = sa; sa = sb; sb = t; } for (j = 0; j < sa.size(); j++) { pa = m[sa[j]]; if (j >= sb.size()) pb = 0; else pb = m[sb[j]]; pc = pa + pb + flag; if (pc > 9) { pc = pc - 10; flag = 1;//有进位 } else flag = 0;//进位标记清0 sa[j] = mm[pc]; } //如果有进位,则需再加一位 if (flag == 1) sa += "1"; } } //加入小数点和逗号 t = ""; for (i = 0; i < sa.size(); i++) { t = t + sa[i]; //加"."号 if (i == 1) t = t + "."; //加"."号 if (i != 1 && (i - 1) % 3 == 0 && i != (sa.size() - 1)) t = t + ","; } sa = t; //反向输出结果 cout << "$"; for (i = sa.size() - 1; i >= 0; i--) cout << sa[i]; cout << endl; } return 0;}
效果如下:
0 0
- 货币求和
- 货币
- 求和
- 求和。
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- 求和
- js二维数组
- 使用xCode6.4集成xmpp的那些坑!!!
- kettle连接hbase
- firefox设置代理服务器时怎样设置才能使得访问局域网时不使用代理
- 最少交换次数
- 货币求和
- UNIX环境编程学习笔记(16)——进程管理之进程环境变量 http://www.cnblogs.com/lienhua34/p/4005367.html
- hdu5452(2015沈阳网络赛C题)
- 无根树转有根树代码
- Objective-C入门14:延展
- 航班预订系统需求说明书-登录模块1.0
- 数据库之视图浅析
- hadoop windows
- MongoDB(索引)