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 }
  • 相关阅读:
    noip模拟赛(一)宠物之战
    noip模拟赛(一)魔法树
    luogu1097统计数字[noip2007提高组Day1T1]
    luogu1207双重回文数[usaco1.2]Dual Palindromes
    【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」
    【2018.9.20】JOI 2017 Final T2「準急電車 / Semiexpress」
    Codeforces Round #510
    【2018.9.15】陈老师模拟赛1
    【loj6191】「美团 CodeM 复赛」配对游戏
    【loj6029】「雅礼集训 2017 Day1」市场
  • 原文地址:https://www.cnblogs.com/qq188380780/p/8862053.html
Copyright © 2011-2022 走看看