标签:
在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:
1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)
2、小数部分保留两位小数(四舍五入)
3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16)
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