【NYOJ】[2028]数字分隔(二)

文章字数:345

问题描述

问题分析

需要考虑的情况挺多的……
比如四舍五入进位、前导0、负数……

写着写着自己就乱了
耽误了好多时间
迷迷糊糊的写出来的

以后有机会再来重新写一遍吧

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#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】[2028]数字分隔(二)

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...