数字分隔(二)
时间限制:
1000 ms | 内存限制:
65535 KB 难度:
3
-
描述
-
在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:
1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)
2、小数部分保留两位小数(四舍五入)
3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)
-
输入
-
多组测试数据,每行输入一个实数n(n的位数小于100)
输出
-
输出分隔后的结果
样例输入
-
0001234567
-
0.0000
-
-10005.1645
样例输出
-
1,234,567.
-
000.00
-
(10,005.16)
-
多组测试数据,每行输入一个实数n(n的位数小于100)
按照题意转化为字符串,然后处理进位,小数,模拟得到结果!
#include<stdio.h>
#include<string.h>
char b[110];
int main()
{
int s,l,d,i,len;
char *ch;
while(scanf("%s",b+1)!=EOF)
{
s=0;
b[0]='0';
if(b[1]=='-')
{
s=1;
b[1]='0';
}
len=strlen(b);
if(ch=strchr(b,'.'))//查找字符串中首次出现.的位置
d=ch-b;
else
d=len;
if(len-d>3)//处理进位
{
if(b[d+3]>'4')//如果小数大于4
{
if(++b[d+2]>'9')
{
b[d+2]='0';
if(++b[d+1]>'9')//如果大于9,进位
{
b[d+1]='0';
++b[d-1];
}
}
i=d-1;
while(b[i]>'9')
{
b[i--]='0';
++b[i];
}
}
b[d+3]='\0';
}
else if(len-d==2)//如果有一位小数,加0
{
b[len++]='0';
b[len]='\0';
}
else if(len-d==1)//如果只有小数点,再加00
{
b[len++]='0';
b[len++]='0';
b[len]='\0';
}
else if(len-d==0)//如果没有小数点,就直接加.00
{
b[len++]='.';
b[len++]='0';
b[len++]='0';
b[len]='\0';
}
for(l=0; b[l]=='0'; ++l);//除去前导0
if(b[l]=='.')//输出整数部分
--l;
if(s)
putchar('(');
while(l<d)
{
putchar(b[l++]);
if(l!=d&&(d-l)%3==0)//
putchar(',');
}
printf("%s",b+d);//输出小数部分
if(s)
putchar(')');
putchar('\n');
}
return 0;
}