数字分隔(二)

来源:互联网 发布:下载keep健身软件 编辑:程序博客网 时间:2024/05/17 22:44
描述

在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:

1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)

2、小数部分保留两位小数(四舍五入)

3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)  

输入
多组测试数据(以eof结尾),每行输入一个实数n(n的位数小于100)
输出
输出分隔后的结果
样例输入
00012345670.0000-10005.1645
样例输出

1,234,567.000.00(10,005.16)

#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;  }