當前位置:
首頁 >
OJ1087: 获取出生日期(多实例测试)(C语言)
發布時間:2025/3/17
37
豆豆
生活随笔
收集整理的這篇文章主要介紹了
OJ1087: 获取出生日期(多实例测试)(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入某人的18位身份證號,輸出其出生日期。
輸入
多實例測試。首先輸入一個整數n,表示測試實例的個數,然后是n行,每行是一個18位身份證號。
輸出
對于輸入的每個身份證號,輸出一行,即其對應的出生日期,輸出格式為:yyyy-mm-dd。
樣例輸入 Copy
3
410106199411178657
410104198202095479
410122197911218097
樣例輸出 Copy
1994-11-17
1982-02-09
1979-11-21
提示
scanf()函數中,可用%md指定讀取位數。
法一(提示方法):
#include<stdio.h> int main() {int i,n;int a,b,c;scanf("%d\n",&n);for(i=0;i<n;i++){scanf("%*6d%4d%2d%2d%*4d",&a,&b,&c);//表示讀入數據時跳過六列、讀入四位數、讀入兩位數、讀入兩位數、跳過四位數printf("%4d-%02d-%02d\n",a,b,c);//分別以四位數、兩位數、兩位數的形式輸出a、b、c("%02d"表示不足兩位用0補齊)} }法二(定義字符數組(逐個賦值),所以用以下兩種方式解決換行符覆蓋數組值的問題):
**1**將數組長度定義為19,多一位存放換行符,防止將換行符傳給下一個數組 #include<stdio.h> int main() {char a[19]; int i,j,n;scanf("%d",&n);for(i=0;i<n;i++){for(j=0;j<19;j++){scanf("%c",&a[j]);}printf("%c%c%c%c-%c%c-%c%c\n",a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13]);}//換行return 0; } **2** 用getchar()將回車吸收 #include<stdio.h> int main() {char a[18]; int i,j,n;scanf("%d\n",&n);for(i=0;i<n;i++){for(j=0;j<18;j++){scanf("%c",&a[j]);}getchar();//讀入回車printf("%c%c%c%c-%c%c-%c%c\n",a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13]);}//換行(此處也可以不換行,仍用getchar()接收回車)return 0; }
法三(較簡:字符串的輸入):
#include<stdio.h> int main() {char a[18]; int i,j,n;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",&a);printf("%c%c%c%c-%c%c-%c%c\n",a[6],a[7],a[8],a[9],a[10],a[11],a[12],a[13]);} return 0; }PS: 如果有幫到你,希望留個贊,謝謝!
總結
以上是生活随笔為你收集整理的OJ1087: 获取出生日期(多实例测试)(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux fflush函数,fflus
- 下一篇: zzulioj 1120: 最值交换