zoukankan      html  css  js  c++  java
  • nyoj1092数字分隔(二)

    数字分隔(二)

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
    描述

    在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:

    1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)

    2、小数部分保留两位小数(四舍五入)

    3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)  

    输入
    多组测试数据(以eof结尾),每行输入一个实数n(n的位数小于100)
    输出
    输出分隔后的结果
    样例输入
    0001234567
    0.0000
    -10005.1645
    样例输出
    1,234,567.00
    0.00
    (10,005.16)

    /*简单的模拟题。就是模拟的很烦人,简单但不好过。。。
    附几组样例:
    0001234567
     0.0000
     -10005.1645
     999.9999
     0009999.999
     0
     0.
     0.000000
     0.0
     0.995
     0.999
     123
     1234
     -0.006
     0000.0
     00000
     11111.1
     -139999.9999
     -0.
     -0.115
     -0.000
    */
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include <iostream>
    #include <stdio.h>
    using namespace std;
    char s[1000];
    int a[1000];
    int main()
    {
        while(~scanf("%s",s))
        {
            memset(a,0,sizeof(a));
            int w=-1;
            int n=strlen(s);
            for(int i=0; i<n; i++)
            {
                if(s[i]=='-')
                    a[i+1]=-1;
                else if(s[i]=='.')
                {
                    a[i+1]=-2;
                    w=i+1;
                }
                else
                    a[i+1]=s[i]-'0';
            }
            int flag=1;
            if(a[1]==-1)
            {
                printf("(");
                flag=0;
            }
            int top=-2;
            for(int i=1; i<n+1; i++)
            {
                if(a[i]!=0&&a[i]!=-1)
                {
                    top=i;
                    //printf("%d ",a[i]);
                    break;
                }
            }
            if(top==w)
                top-=1;
            if(top==-2)
            {
                printf("0.00");
                if(flag==0)
                    printf(")");
                printf("
    ");
                continue;
            }
            if(w!=-1)
            {
                //printf("top=%d w=%d
    ",top,w);
                a[n+1]=0,a[n+2]=0,a[n+3]=0;
                if(a[w+3]>=5)
                {
                    for(int i=w+2; i>=top; i--)
                    {
                        if(i==w||a[i]==-1)
                            continue;
                        a[i]+=1;
                        if(a[i]<10)
                            break;
                    }
                    if(a[top]==10)
                    {
                        a[top-1]=1;
                        top=top-1;
                    }
                }
                for(int i=0; i<=n; i++)
                {
                    if(a[i]==10)
                        a[i]=0;
                }
                int m=(w-top)%3;
                if(m==0)
                    m=3;
                for(int i=top; i<m+top; i++)
                {
                    if(a[i]!=-1&&i<m+top)
                        printf("%d",a[i]);
                }
                if(a[m+top]!=-2)
                {
                    printf(",");
                    int k=0;
                    for(int i=m+top; i<w; i++)
                    {
                        if(a[i]!=-1)
                        {
                            printf("%d",a[i]);
                            k++;
                            if(k==3&&i!=w-1)
                            {
                                printf(",");
                                k=0;
                            }
                        }
                    }
                    printf(".%d%d",a[w+1],a[w+2]);
                }
                else
                {
                    printf(".%d%d",a[w+1],a[w+2]);
                }
            }
            else
            {
                // printf("top=%d w=%d
    ",top,w);
                n+=1;
                int x=(n-top)%3;
                if(x==0)
                    x=3;
                for(int i=top; i<x+top; i++)
                {
                    if(a[i]!=-1&&i<x+top)
                        printf("%d",a[i]);
                }
                if(x+top<n)
                    printf(",");
                int  k=0;
                for(int i=x+top; i<n; i++)
                {
    
                    printf("%d",a[i]);
                    k++;
                    if(k==3&&i!=n-1)
                    {
                        printf(",");
                        k=0;
                    }
                }
                printf(".00");
            }
            if(flag==0)
                printf(")
    ");
            else
                printf("
    ");
        }
    }
    
  • 相关阅读:
    测试工作——XML
    js call apply
    JavaScript 作用域和作用域链
    hybird app
    正则表达式
    浏览器渲染原理
    head 头标签(转发)
    参考资料地址
    unix 常用命令
    phantomjs 自动化测试
  • 原文地址:https://www.cnblogs.com/da-mei/p/9053342.html
Copyright © 2011-2022 走看看