数字分隔(二)
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:
1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)
2、小数部分保留两位小数(四舍五入)
3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)
-
输入
-
多组测试数据,每行输入一个实数n(n的位数小于100)
输出
-
输出分隔后的结果
样例输入
-
00012345670.0000-10005.1645
样例输出
-
1,234,567.000.00(10,005.16)
-
#include<stdio.h> #include<string.h> int main(){ int i,j,k,l,fuhao,x,y,z,num; char a[110],b[110]; while(gets(a)){ memset(b,'\0',sizeof(b)); l = strlen(a); for(i = 0;i < l;++i){ if(a[i]=='.'){ x = i;break; } x=l; } i=num=0; if(a[0]=='-') { fuhao=1;i++; } else fuhao=0; for(;i<x-2;++i) if(a[i]!='0') break; b[0]='0'; for(j=1;i<x;++i,++j){ b[j]=a[i]; num++; } y=0;a[l]=a[l+1]=a[l+2]='0';b[j++]='.'; if(x==l) i=x; else i=x+1; for(;i<=x+3;++i){ b[j++]=a[i]; y++; if(y==3) break; } if(b[j-1]>='5'){ if(b[j-2]=='9'&&b[j-3]=='9'){ b[j-2]=b[j-3]='0'; b[j-5]++; for(i=j-5;i>=0;--i){ if(b[i]>'9'){ b[i]-=10; b[i-1]++; } else break; } } else if(b[j-2]=='9'&&b[j-3]!='9'){ b[j-2]='0';b[j-3]++; } else b[j-2]++; } if(b[0]!='0') num++; if(fuhao) printf("("); for(i=0;i<j-5;++i) if(b[i]!='0') break; y=3-num%3; if(y==3) y=0; for(;i<j-4;++i) { if(y==3){ printf(","); y=0; } y++; printf("%c",b[i]); } for(;i<j-1;++i) printf("%c",b[i]); if(fuhao) printf(")"); printf("\n"); } return 0; }
-
多组测试数据,每行输入一个实数n(n的位数小于100)