需要考虑的情况挺多的……
比如四舍五入进位、前导0、负数……
写着写着自己就乱了
耽误了好多时间
迷迷糊糊的写出来的
以后有机会再来重新写一遍吧
#include<stdio.h>
#include<string.h>
int main() {
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
char s[120];
while(scanf("%s",s)!=EOF) {
int l=strlen(s);
bool flagf=false;
if(s[0]=='-') {
flagf=true;
for(int i=0; i<l-1; i++)
s[i]=s[i+1];
l--;
}
if(flagf)
printf("(");
int ti=l;
for(int i=0; i<l; i++)
if(s[i]=='.')
ti=i;
int t=0;
while(s[t]=='0') {
if(s[t+1]!='.')
t++;
else
break;
}
if(t) {
l-=t;
ti-=t;
for(int i=0; i<l; i++)
s[i]=s[i+t];
}
if(l<1) {
printf("0.00");
if(flagf)
printf(")");
printf("
");
continue;
}
bool flag=false;
if(ti+3<l) {
if(s[ti+3]-'0'>4) {
s[ti+2]++;
int t=ti+2;
while(s[t]-'0'>9) {
s[t]-=10;
if(t>0) {
if(s[t-1]=='.') {
s[t-2]++;
t-=2;
} else {
s[t-1]++;
t--;
}
} else
flag=true;
}
}
}
if(flag) {
for(int i=l; i>0; i--)
s[i]=s[i-1];
s[0]='1';
ti++;
l++;
}
for(int i=0; i<ti%3; i++) {
printf("%c",s[i]);
}
if(ti>2) {
if(ti%3)
printf(",");
int k=0;
for(int i=ti%3; i<ti; i++) {
k++;
printf("%c",s[i]);
if(k==3&&i!=ti-1) {
printf(",");
k=0;
}
}
}
printf(".");
if(ti+2<l)
printf("%c%c",s[ti+1],s[ti+2]);
else if(ti+1<l)
printf("%c0",s[ti+1]);
else
printf("00");
if(flagf)
printf(")");
printf("
");
}
return 0;
}
题目地址:【NYOJ】[1092]数字分隔(二)