首页 > 代码库 > NYOJ1092 数字分隔(二)
NYOJ1092 数字分隔(二)
数字分隔(二)
时间限制:1000 ms | 内存限制:65535 KB
难度:3
- 描述
在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:
1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)
2、小数部分保留两位小数(四舍五入)
3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)
- 输入
- 多组测试数据,每行输入一个实数n(n的位数小于100)
- 输出
- 输出分隔后的结果
- 样例输入
00012345670.0000-10005.1645
- 样例输出
1,234,567.000.00(10,005.16)
- 上传者
- ACM_孙毓阳
#include <stdio.h> #include <string.h> #define maxn 110 char buf[maxn]; int main() { int sign, left, dot, i, len; char *ch; while(scanf("%s", buf + 1) != EOF) { sign = 0; buf[0] = '0'; if(buf[1] == '-') { sign = 1; buf[1] = '0'; } len = strlen(buf); if(ch = strchr(buf, '.')) { dot = ch - buf; } else dot = len; // 以下处理进位 if(len - dot > 3) { if(buf[dot+3] > '4') { if(++buf[dot+2] > '9') { buf[dot+2] = '0'; if(++buf[dot+1] > '9') { buf[dot+1] = '0'; ++buf[dot-1]; } } i = dot - 1; while(buf[i] > '9') { buf[i--] = '0'; ++buf[i]; } } buf[dot+3] = '\0'; } else if(len - dot == 2) { buf[len++] = '0'; buf[len] = '\0'; } else if(len - dot == 1) { buf[len++] = '0'; buf[len++] = '0'; buf[len] = '\0'; } else if(len - dot == 0) { buf[len++] = '.'; buf[len++] = '0'; buf[len++] = '0'; buf[len] = '\0'; } // printf("%s...\n", buf); // 以下去前导零 for(left = 0; buf[left] == '0'; ++left) ; // 输出整数部分 if(buf[left] == '.') --left; if(sign) putchar('('); while(left < dot) { putchar(buf[left++]); if(left != dot && (dot - left) % 3 == 0) putchar(','); } // 输出小数部分 printf("%s", buf + dot); if(sign) putchar(')'); putchar('\n'); } return 0; }
NYOJ1092 数字分隔(二)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。