• 【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]数字分隔(二)

  • 相关阅读:
    Leecode刷题之旅-C语言/python-67二进制求和
    maven 聚合
    maven 继承
    maven 常用命令
    maven 术语
    maven安装
    RabbitMQ 消费消息
    RabbitMQ 生产消息并放入队列
    RabbitMQ 在 web 页面 创建 exchange, queue, routing key
    mybatis 通过实体类进行查询
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569591.html
Copyright © 2020-2023  润新知