zzulioj1087: 获取出生日期(多实例测试)
题目描述
输入某人的18位身份证号,输出其出生日期。
输入
多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。
输出
对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。
样例输入 Copy
3
410106199411178657
410104198202095479
410122197911218097
样例输出 Copy
1994-11-17
1982-02-09
1979-11-21
提示
scanf()函数中,可用%md指定读取位数。
AC代码
#include<stdio.h>
int main()
{
int y,m,a,n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%*6d%4d%2d%2d%*d",&y,&m,&a); //scanf()函数中,可用%md指定读取位数。
printf("%d-%02d-%02d\n",y,m,a); //输出最后两位,不足两位,右对齐,左补0
}
return 0;
}
若将输出语句改为
printf("%d-%d-%d\n",&y,&m,&a);
或者
printf("%d-%2d-%2d\n",&y,&m,&a);
都不正确。
因为printf("%d-%02d-%02d\n",y,m,a)表示输出整型变量m和a的后两位,若不足两位,则右对齐,左补0。
因为月和日可能存在01 02 03这样的情况,此时整型变量m和a中存放的只是1位数字,为了满足题目要求的输出,必须对输出格式做限制。