NYIST 1092 数字分隔(二)
来源:互联网 发布:海量数据与数据港谁好 编辑:程序博客网 时间:2024/05/17 23:48
本题是南阳理工学院ACM网站上的一道字符串处理题,很长时间不敲代码了手生得很,果然码了很长时间~
描述
在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下: 1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00) 2、小数部分保留两位小数(四舍五入) 3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)输入
多组测试数据,每行输入一个实数n(n的位数小于100)
输出
输出分隔后的结果
样例输入
0001234567 0.0000 -10005.1645
样例输出
1,234,567.00 0.00 (10,005.16)
AC代码:
#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>using namespace std;int main(){ char str[201], a[201]; while(~scanf("%s", a)) { bool neg = false; int ten = 0; if(a[0] == '-') { neg = true; a[0] = '0'; printf("("); } int len = strlen(a); int point = 0; for(int i = 0 ; i < len; ++i) { if(a[i] == '.') { point = i; break; } }// printf("point = %d\n", point); if(point > 0) {//有小数前导零处理 int i, j = 0; bool flg = true; for(i = 0; i < point-1; i++) { if(a[i] == '0' && flg) { continue; } else { str[j++] = a[i]; flg = false; } } str[j++] = a[i]; str[j++] = '.'; for(i = point+1; i < len; i++) { str[j++] = a[i]; } str[j] = '\0'; } else { int j = 0; bool flg = true; for(int i = 0; i < len-1; i++) { if(a[i] == '0' && flg) { continue; } else { str[j++] = a[i]; flg = false; } } str[j++] = a[len-1]; str[j] = '\0'; }// printf("~~~%s~~~\n", str); len = strlen(str); point = 0; for(int i = 0 ; i < len; ++i) { if(str[i] == '.') { point = i; if(i == len-1) { str[len] = str[len+1] = '0'; str[len+2] = '\0'; } else if(i == len-2) { str[len] = '0'; str[len+1] = '\0'; } else if(len-point-1 > 2) { if(str[point+3] >= '5' && str[point+3] <= '9') { if(str[point+2] != '9') { str[point+2] += 1; } else { char c = str[0]; for(int t = point+2; t >= 0; t--) { if(str[t] == '.') { continue; } if(str[t] == '9') { str[t] = '0'; } else { str[t] += 1; break; } } if((c == '9' && str[0] == '0')) { ten = 1; } } } str[i+3] = '\0'; } else { str[i+3] = '\0'; } } } if(ten) { printf("1"); if(point%3 == 0) { printf(","); } } if(point > 0) {//有小数 if(point <= 3) { printf("%s", str); } else { int i; int head = point%3; int cnt = 0;; for(i = 0; i < head; i++) { printf("%c", str[i]); cnt = 3; } // printf("-!%d %d!-\n", cnt, i); for( ; i < point; i++) { if(cnt == 3) { cnt = 0; printf(","); } printf("%c", str[i]); cnt++; } if(point > 0) { printf("."); } printf("%c%c", str[point+1], str[point+2]); } } else {//整数 int i, head = len%3; int cnt = 0;; for(i = 0; i < head; i++) { printf("%c", str[i]); cnt = 3; } for( ; i < len; i++) { if(cnt == 3) { cnt = 0; printf(","); } printf("%c", str[i]); cnt++; } printf(".00"); } if(neg) { printf(")"); } printf("\n"); } return 0;}
测试样例:
999999999.999999
-999999999.999999
0 0
- NYIST 1092 数字分隔(二)
- 数字分隔(二)
- 数字分隔(二)
- 数字分隔(二)
- 数字分隔(二)
- 数字分隔(二)
- 数字分隔(二)
- NYOJ 1092-数字分隔(二)-sdfgdbvc
- NYOJ 1092 数字分隔(二)
- 【NYOJ】[1092]数字分隔(二)
- 南阳oj 1092 数字分隔(二)
- NYOJ 1092 数字分隔(二)
- 南阳1092-数字分隔(二)
- NYOJ 1092:数字分隔(二)【JAVA 】
- NYOJ1092 数字分隔(二)
- 68.数字分隔(二)
- nyoj1092数字分隔(二)
- nyoj.1092 数字分隔(二)【水题】 2015/03/14
- fullpage.js---全屏滚动插件
- 带你一步步实现android引导页面
- Spark 2.0介绍:SparkSession创建和使用相关API
- 【bzoj】3436 小k的农场 差分约束
- HDU 5691 Sitting in Line
- NYIST 1092 数字分隔(二)
- Avoiding Image Decompression Sickness(为啥AF的图片下载显示比SD慢。。)
- 图论的各种姿势(上)
- pl/sql简单存储过程
- 常用网络命令——ping
- CetnOS下使用Eclipse开发Servlet
- fixed<<setprecision(n)
- Windows下面安装和配置MySQL(5.6.20)
- Spring_Spring_教程12_Spring利用注解实现Aop