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

来源:互联网 发布:那年呐服饰淘宝代理可信吗 编辑:程序博客网 时间:2024/04/30 15:50

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

需要考虑的情况挺多的……
比如四舍五入进位、前导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("\n");            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("\n");    }    return 0;}

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

0 0