【南陽ACM】数字区切り(二)
1898 ワード
:
数値区切り(2)
時間制限:1000 ms|メモリ制限:65535 KB
難易度:3
説明
遠い国では、銀行がユーザーの注文をより速くよりよく処理するために、一連の数字を一定のルールで区切ることにしました.区切るルールは以下の通りです.
1、実数の整数部を3つの数字ごとにカンマで区切る(整数部の上位に余分な0がある場合は、まず余分な0をフィルタリングしてから、数値区切る.例えば:0001234567出力結果は1234567.00)
2、小数部は2桁の小数を保留する(四捨五入)
3、この数が負の場合、出力時に区切られた数字をかっこで囲む必要があります.例えば、-10005.1645の出力結果は(10005.16)
入力
複数のテストデータのセットで、各行に実数n(nのビット数が100未満)を入力します.
しゅつりょく
区切りの結果を出力
サンプル入力
00012345670.0000
-10005.1645
サンプル出力
1,234,567.000.00
(10,005.16)
本題は99.999を考慮する必要がある.3546;-0;35456.などの特殊な状況は、具体的な解釈はコードを参照してください.
コードは次のとおりです.
#include
using namespace std;
string str;
int main()
{
int l,lose,last,first,remainder,aunt,i;
while(cin>>str)
{
string s="0";
lose=0;i=0;
if(str[0]=='-') {lose=1;str[0]='0';} //lose ();
else
{
s+=str;
str=s;
}
l=str.length();
last=l; //last , 。
for(i=0;i3&&str[last+3]>52) // 2 , “ ”。
{
int more=1;
int num;
for(int j=last+2;j>=0;j--)
{
if(j==last) continue;
num=str[j]-48;
num+=more;
more=num/10;
num=num%10;
str[j]=num+48;
if(more==0) break;
}
}
for(i=0;i<=last;i++) // ‘0’ 。
{
if(str[i]!='0') {first=i;break;}
}
remainder=(last-first)%3;
if(lose) cout<=3) // 。
cout<