数字分隔(二)
时间限制:
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.00
-
0.00
-
(10,005.16)
-
多组测试数据,每行输入一个实数n(n的位数小于100)
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int main()
{
char str[110];int len,i;bool flag,plus;
while(scanf("%s",str)!=EOF)
{
len=strlen(str);flag=true;
stack<int> s,q;
for(i=plus=str[0]=='-'?1:0;i<len;i++)
{
if(flag)
if(str[i]=='0'&&str[i]!='.'&&i!=len-1) continue;
else
{
if(str[i]=='.')
s.push(0);
if(i==len-1)
{
s.push(str[i]-'0');
for(int m=0;m<3;m++)
s.push(0);
break;
}
flag=false;
}
if(str[i]!='.')
{
s.push(str[i]-'0');
if(i==len-1)
for(int m=0;m<3;m++)
s.push(0);
}else
{
for(int m=1;m<4;m++)
s.push((i+m<len)?(int)(str[i+m]-'0'):0);
break;
}
}
int c=0,k=2;
if(s.top()>4) c=1;s.pop();
while(s.size())
{
q.push((s.top()+c)%10);
c=(s.top()+c)/10;
s.pop();
}
if(plus) printf("(");
if(c) printf("%d",c);
else { printf("%d",q.top());q.pop();}
while(q.size())
{
if(!(q.size()-2))
printf(".");
if(q.size()>2&&(q.size()-2)%3==0)
printf(",");
printf("%d",q.top());
q.pop();
}
if(plus) printf(")");
printf("\n");
}
return 0;
}