码迷,mamicode.com
首页 > 其他好文 > 详细

数字分隔(二)

时间:2015-04-27 11:17:50      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

数字分隔(二)

时间限制: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)

#include<stdio.h>
#include<string.h>
int main(void)
{
	char str[105],result[105];
	int count,i,point,len,carry,j;
	while(scanf("%s",str)!=EOF)
	{
		i=count=0;
		point=-1;
		if(str[i]=='-')
		{
			result[count++]=str[0];
			i++;
		}
		while(str[i]=='0'&&str[i+1]!='\0'&&str[i+1]!='.')
		      i++;
		while(str[i]!='\0')
		{
			result[count++]=str[i];
			i++;
		}
		result[count]='\0';
		strcpy(str,result);
		len=strlen(str);
		count=0;
		for(i=0;str[i]!='\0';i++)
		    if(str[i]=='.')
		    {
		    	point=i;
		    	break;
			}
		if(point!=-1)
		{
			carry=0;
			if(point+3<len)
			{
				if(str[point+3]>='5')
				 carry=1;
				 for(i=point+2;i>point;i--)
				 {
				 	int t=str[i]-'0'+carry;
				 	if(t>=10)
				 	{
				 		carry=1;
				 		t=t-10;
					 }
					 else
					   carry=0;
					result[count++]=t+'0';
				 }
			}
			else if(point+2<len)
			{
				for(i=point +2;i>point;i--)
				  result[count++]=str[i];
			}
			else 
			{
				result[count++]='0';
				result[count++]=str[point+1];
			}
			result[count++]='.';
			for(i=point-1;i>=0&&str[i]!='-';i--)
			{
				int t=str[i]-'0'+carry;
				if(t>=10)
				{
					t=t-10;
					carry=1;
				}
				else
				 carry=0;
				if((point-1-i)%3==0&&i!=point-1)
				  result[count++]=',';
				result[count++]=t+'0';
			}
			if(carry!=0)
			{
				if((point-1-i)%3==0)
				  result[count++]=',';
				result[count++]=carry+'0';
			}	
		}
		else
		{
			result[count++]='0';
			result[count++]='0';
			result[count++]='.';
			for(i=len-1;i>=0&&str[i]!='-';i--)
			{
				if((len-1-i)%3==0&&i!=len-1)
				  result[count++]=',';
				result[count++]=str[i];
			}
		}
		if(str[0]=='-')
		  result[count++]='(';
		for(i=0,j=count-1;i<j;i++,j--)
		{
			char ch=result[i];
			result[i]=result[j];
			result[j]=ch;
		}
		if(result[0]=='(')
		 result[count++]=')';
		result[count]='\0';
	   printf("%s\n",result);
	}
   return 0;
}


数字分隔(二)

标签:

原文地址:http://blog.csdn.net/qq_16997551/article/details/45307067

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!