首页 > 代码库 > 数字分隔(二)

数字分隔(二)

数字分隔(二)

时间限制: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)
来源
calamity_coming
上传者

ACM_孙毓阳

首先先声明一下,这个在oj上交是wrong anwer,目前没有找到错误。谁愿意提供特殊数据。。

思路先保留两位小数,然后去掉多余的前导零,然后整数部分三位隔开。。。写的很容易理解。。希望大家及时纠错……thank you

#include<iostream>
#include<string>
using namespace std;
int main()
{
 string a;
 int position,i;
  while(cin>>a)
  {
	  position=a.find(".");
	  if(position==-1)  //没小数点
		  a=a+".00";    
	  else              //有小数点
	  {
		  if(a[position+1]=='\0')//
			  a=a+"00";
		  if(a[position+2]=='\0')
			  a=a+'0';
		  if(a[position+3]!='\0')
		  {
			  if(a[position+3]>='5'&&a[position]<='9')
			  {
				  a[position+2]++;
			     a[position+3]='\0';
			    if(a[position+2]=='9'+1)
				{ a[position+2]='0';
			     a[position+1]++;
				 if(a[position+1]=='9'+1)
				 {
                   a[position+1]='0';
				   a[position-1]++;
				   for(i=position-1;i>0;i--)
				   {
					   if(a[i]=='9'+1)
					   {
						   a[i]='0';
						   if(i==1 &&a[i-1]=='-')
						   {
							   a[0]='1';
                               a="-"+a;
						   }
						   else
						   a[i-1]++;
	
					   }
				   }
				   if(a[0]=='9'+1)
				   {
					   a[0]='0';
					   a="1"+a;
				   }
				 }
				} 
			  }
			  else
				  a[position+3]='\0';
		  }
	  }
	 position=a.find(".");
	 int count=0;
	 for(i=0;i<position;i++)
	 {
		 if(a[i]=='0')
			 count++;
	 }
	 if(a[0]!='-'&&count==position)
		 a.replace(0,position,"0");
	 else if(a[0]=='-'&&count==position-1)
		  a.replace(1,count,"0");
	 else if(a[0]=='-')
	  {	while(a[1]=='0')
		{	
			a.erase(1,1);
		}
	 }
	 else if(a[0]!='-')
	 {	while(a[0]=='0')
	  {		                                                                                           
			a.erase(0,1);
		}
	 }
	  position=a.find(".");
  if(a[0]!='-')
  {	  for(i=position-1;i>2;)// -,456.4  123,456.4    -00000.9  -3.
	{
		a.insert(i-2,",");
	    position=a.find(",");
		i=position-1;
	}
  }
  else
  {
      for(i=position-1;i>3;)// -1,456.4  123,456.4
	{
		a.insert(i-2,",");
	    position=a.find(",");
		i=position-1;
	}
  }
	if(a[0]=='-')
	{
		a.erase(0,1);
		cout<<"("<<a<<")"<<endl;
	}
	else
		cout<<a<<endl;
  }
	return 0;
}


数字分隔(二)