南阳1092-数字分隔(二)

来源:互联网 发布:数据gap是什么意思 编辑:程序博客网 时间:2024/05/17 22:44

数字分隔(二)

时间限制: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)
这个题没什么技术含量,但是还是挺繁琐的,注意四舍五入时的进位
#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;}


0 0
原创粉丝点击