【NYOJ】[1092]数字分隔(二)

这里写图片描述
这里写图片描述

需要考虑的情况挺多的……
比如四舍五入进位、前导0、负数……

写着写着自己就乱了
耽误了好多时间
迷迷糊糊的写出来的

以后有机会再来重新写一遍吧

#include<stdio.h>
#include<string.h>
int main() {

//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);

    char s[120];
    while(scanf("%s",s)!=EOF) {
        int l=strlen(s);
        bool flagf=false;
        if(s[0]=='-') {
            flagf=true;
            for(int i=0; i<l-1; i++)
                s[i]=s[i+1];
            l--;
        }
        if(flagf)
            printf("(");
        int ti=l;
        for(int i=0; i<l; i++)
            if(s[i]=='.')
                ti=i;
        int t=0;
        while(s[t]=='0') {
            if(s[t+1]!='.')
                t++;
            else
                break;
        }
        if(t) {
            l-=t;
            ti-=t;
            for(int i=0; i<l; i++)
                s[i]=s[i+t];
        }
        if(l<1) {
            printf("0.00");
            if(flagf)
                printf(")");
            printf("
");
            continue;
        }
        bool flag=false;
        if(ti+3<l) {
            if(s[ti+3]-'0'>4) {
                s[ti+2]++;
                int t=ti+2;
                while(s[t]-'0'>9) {
                    s[t]-=10;
                    if(t>0) {
                        if(s[t-1]=='.') {
                            s[t-2]++;
                            t-=2;
                        } else {
                            s[t-1]++;
                            t--;
                        }
                    } else
                        flag=true;
                }
            }
        }
        if(flag) {
            for(int i=l; i>0; i--)
                s[i]=s[i-1];
            s[0]='1';
            ti++;
            l++;
        }
        for(int i=0; i<ti%3; i++) {
            printf("%c",s[i]);
        }
        if(ti>2) {
            if(ti%3)
                printf(",");
            int k=0;
            for(int i=ti%3; i<ti; i++) {
                k++;
                printf("%c",s[i]);
                if(k==3&&i!=ti-1) {
                    printf(",");
                    k=0;
                }
            }
        }
        printf(".");
        if(ti+2<l)
            printf("%c%c",s[ti+1],s[ti+2]);
        else if(ti+1<l)
            printf("%c0",s[ti+1]);
        else
            printf("00");
        if(flagf)
            printf(")");
        printf("
");
    }
    return 0;
}

题目地址:【NYOJ】[1092]数字分隔(二)

原文地址:https://www.cnblogs.com/BoilTask/p/12569591.html