GitBook

这里写图片描述 这里写图片描述

需要考虑的情况挺多的…… 比如四舍五入进位、前导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("\n");
			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("\n");
	}
	return 0;
}

题目地址:【NYOJ】[1092]数字分隔(二)