您的位置:首页 > 其它

NYOJ 1092-数字分隔(二)-sdfgdbvc

2015-07-04 21:00 435 查看

数字分隔(二)

时间限制: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>
int main()
{
char s[150];
memset(s,0,sizeof(s));
int f,i,j,len,fff;
while(scanf("%s",s)!=EOF)
{
f=0;fff=0;
len=strlen(s);
if(s[0]=='-')
f=1;
for(j=0;j<=len;j++)
{
if(s[j]=='.'||s[j]==0)
{
i=j-1;
break;
}
if(s[j]!='0'&&s[j]!='-')
{
i=j;
break;
}
}
len=len-i;
for(j=0;j<=len;j++,i++)
{
s[j]=s[i];
if(s[j-3]=='.')
{
s[j+1]='\0';
break;
}
}
if(s[j-3]=='.'&&s[j]>='5'&&s[j]<='9')
{
s[j]='\0';
while(j--)
{
if(s[j]=='.')
j--;
s[j]++;
if(s[j]>'9')
s[j]='0';
else break;
}
if(s[0]=='0')
fff=1;
}
else if(s[j-3]=='.')
s[j]='\0';
len=strlen(s);
if(strchr(s,'.')!=NULL)
len=len-strlen(strchr(s,'.'));
if(f==1)
printf("(");
if(fff==1)
{
printf("1");
if(len%3==0)
printf(",");
}
for(i=0;i<len;i++)
{
printf("%c",s[i]);
if(s[i+1]=='\0')
{
s[i+1]='.';
s[i+2]='0';
s[i+3]='0';
s[i+4]='\0';
}
else if(s[i+1]=='.'&&s[i+3]=='\0')
{
s[i+3]='0';
s[i+4]='\0';
}
if(s[i+1]=='.')
{
printf("%s",&s[i+1]);
break;
}
if((i+1-len%3)%3==0)
printf(",");
}
if(f==1)
printf(")");
printf("\n");
memset(s,0,sizeof(s));
}
return 0;
}


思路:

判断是否为负->去多余零->四舍五入保留两位小数->进位与否->各种情况的判断以及输出

ps:CSDN编程语言选项里怎么没有C语言呢?用的“其它”选项,不知道对不对......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: