水题hdoj-2005 scanf用好了事半功倍

我之前的写法:

#include
#include
char a[12];
int main() {
	while(scanf("%s", a)!=EOF) {
		int len = strlen(a);
		int i, ansy = 0, ansm = 0, ansd = 0;
		for(i = 0; i < len && a[i]!= '/'; i++) {
			ansy = ansy*10 + a[i]-48;
		}
		for(i = i+1; i < len && a[i]!= '/'; i++) {
			ansm = ansm*10+a[i]-48;
		}
		for(i = i+1; i < len; i++) {
			ansd = ansd*10+a[i]-48;
		}
		//31.28/29.31.30.31.30.31.31.30.31.30.31
		//判断闰年
		bool flag = false; //闰年标志变量 
		if((ansy%4==0 && ansy%100!= 0) || ansy %400 == 0) flag = true;
		int ans = 0;
		int d[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
		if(flag) d[2] = 29;
		for(int i = 1; i < 12; i++) {
			if(ansm > i) ans += d[i];
		}
		ans += ansd;
		printf("%d\n", ans);
		/*之前的写法 
		if(ansm > 1) ans += 31;
		if(ansm > 2) ans += (flag?29:28);
		if(ansm > 3) ans += 31;
		if(ansm > 4) ans += 30;
		if(ansm > 5) ans += 31;
		if(ansm > 6) ans += 30;
		if(ansm > 7) ans += 31;
		if(ansm > 8) ans += 31;
		if(ansm > 9) ans += 30;
		if(ansm > 10) ans += 31;
		if(ansm > 11) ans += 30;
		ans += ansd;
		*/

	}
	return 0; 
}



看了别人的方法之后,更改的写法(体现在scanf用法的改变)://按格式输入的这个我真的不太会,还要学习!!

#include
int main() {
	int ansy, ansm, ansd;
	while(scanf("%d/%d/%d", &ansy, &ansm, &ansd)!=EOF) {
		bool flag = false; //闰年标志变量 
		if((ansy%4==0 && ansy%100!= 0) || ansy %400 == 0) flag = true;
		int ans = 0;
		int d[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
		if(flag) d[2] = 29;
		for(int i = 1; i < 12; i++) {
			if(ansm > i) ans += d[i];
		}
		ans += ansd;
		printf("%d\n", ans);
	}
	return 0; 
}



你可能感兴趣的:(水题hdoj-2005 scanf用好了事半功倍)