nyoj1092数字分隔(二)

来源:互联网 发布:php bt下载 编辑:程序博客网 时间:2024/06/04 19:14

数字分隔(二)

时间限制: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");    }}
原创粉丝点击