zoukankan      html  css  js  c++  java
  • 南阳1092----数字分隔(二)

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 char s[105];
     6 int main(){
     7     bool is_native;
     8     int len, point, endline;
     9     while(~scanf("%[^
    ]",s)){
    10         getchar();//吃回车
    11         if(s[0] == '-') is_native = true;//判断负数
    12         else is_native = false;
    13         point = len = strlen(s);//当没有小数点时,len处为小数点
    14         for(int i = 0; s[i]; ++i)//找小数点
    15             if(s[i] == '.'){
    16                 point = i;
    17                 break;
    18             }
    19         endline = point;//.999
    20         if(point-1 >= 0 && s[point-1] >= '0' && s[point-1] <= '9')//0.999
    21             endline = point-1;
    22         for(int i = 0; i < point; ++i)//00000123
    23             if(s[i] > '0' && s[i] <= '9'){
    24                 endline = i;
    25                 break;
    26             }
    27         s[point] = '.';//len处可能没有.
    28         for(int i = point+1; i <= point+3; ++i)//处理小数点后三位
    29             s[i] = s[i]?:'0';
    30         if(s[point+3] > '4') ++s[point+2];//小数点后第二位的进位
    31         int up = s[point+3] = 0;
    32         for(int i = point+2; i >= endline; --i){//依次进位
    33             if(i == point) continue;
    34             s[i] += up;
    35             up = (s[i]-'0')/10;
    36             s[i] = (s[i]-'0')%10 + '0';
    37         }
    38         bool is_all_zero = true;//0000000.0之类的
    39         for(int i = point-1; i >= endline; --i)
    40             if(s[i] != '0') is_all_zero = false;
    41         if(up) is_all_zero = false;//0.999
    42         int num = (point+2)%3;//找出在那加入,
    43         if(is_native) putchar('(');
    44         if(up){
    45             printf("%d",up);
    46             if(s[0] != '.' && (endline+2)%3 == num)
    47                 putchar(',');
    48         }
    49         int i;
    50         if(is_all_zero) { putchar('0'); i = point; }//前面都是零输出一个零,并从小数点处开始继续输出
    51         else i = endline;//否则从开头开始
    52         for(; i < point+3; ++i){
    53             putchar(s[i]);
    54             if(i < point-1 && i%3 == num)
    55                 putchar(',');
    56         }
    57         if(is_native) putchar(')');
    58         putchar('
    ');
    59         memset(s,0,sizeof(s));//清空数组,防止干扰
    60     }
    61     return 0;
    62 }
  • 相关阅读:
    在蓝鲸标准运维上进行原子开发二
    python 使用eval报错NameError: name ‘null’ is not defined
    前端时间转换 2019-08-18T16:00:00.000Z 转换成格式2019-08-18
    python list排序
    Django 分页Paginator的简单用法
    蓝鲸ESB自定义组件的部署步骤
    Unity对象池的实现
    Unity3D UGUI实现Toast
    C#中扩展方法的使用
    Unity3D实现多语言切换
  • 原文地址:https://www.cnblogs.com/qq188380780/p/8862053.html
Copyright © 2011-2022 走看看