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

我之前的写法:

#include<stdio.h>
#include<string.h>
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<stdio.h>
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; 
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值