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("\n");
            continue;
        }
        if(w!=-1)
        {
            //printf("top=%d w=%d\n",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\n",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(")\n");
        else
            printf("\n");
    }
}
posted @ 2017-10-13 19:42  _大美  阅读(181)  评论(0编辑  收藏  举报