首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PAT基礎/甲級字符串處理專題精解(一):格式化輸出/個位數統計

     編輯:關於C語言

PAT基礎/甲級字符串處理專題精解(一):格式化輸出/個位數統計

本文精選 PAT(程序設計能力測試)入門級字符串處理經典題目:B1006 換個格式輸出整數 與 B1021 個位數統計,提供完整 C++ 解法、核心邏輯解析、邊界處理技巧,適合 PAT 乙級備考熱身與基礎語法鞏固。

題目一:B1006 換個格式輸出整數(15分)

問題描述

輸入正整數 n (<1000),用字母 B 表示「百」、S 表示「十」、12...n 表示個位數字。例:234 → BBSSS1234(2百、3十、個位4)。

核心邏輯

  1. 將整數分解為個、十、百位數字(逆序提取)
  2. 從高位向低位輸出:百位輸出 B,十位輸出 S,個位輸出 1~n 序列
  3. 注意:個位輸出的是 1到n的連續數字,而非數字本身

代碼實現

#include <cstdio>
int main() {
    int n; scanf("%d", &n);
    int digits[5], cnt = 0;
    while (n) { digits[cnt++] = n % 10; n /= 10; }  // 逆序存儲:個、十、百
    for (int i = cnt-1; i >= 0; i--) {
        if (i == 2) for (int j=0; j

樣例驗證

輸入分解輸出說明
234百=2, 十=3, 個=4BBSSS12342個B, 3個S, 1234
23十=2, 個=3SS123無百位,2個S, 123
9個=9123456789僅個位

題目二:B1021 個位數統計(15分)

問題描述

輸入不超過 1000 位的正整數 N,統計每種數字出現次數,按數字升序輸出 D:M 格式。

核心邏輯

  1. 字符串讀取(超長整數無法用數值類型)
  2. 長度為 10 的計數數組 cnt[10],遍歷字符串 cnt[c-'0']++
  3. 順序遍歷 0-9,計數>0 時輸出

代碼實現

#include <cstdio> #include <cstring>
#define MAXL 1010
char s[MAXL];
int main() {
    gets(s);  // 或 scanf("%s", s)
    int cnt[10] = {0}, len = strlen(s);
    for (int i=0; i

樣例驗證

輸入:100311
輸出:
0:2
1:3
3:1

通用技巧總結

技巧適用場景代碼模式
整數分解位數位權相關題目while(n){d[c++]=n%10;n/=10;}
字符串處理大整數超長數值輸入gets(s); s[i]-'0'
計數數組統計字符字符頻率統計int cnt[10]={0}; cnt[c-'0']++
逆序存儲/正序輸出位分解後高位優先for(i=cnt-1;i>=0;i--)
特殊格式輸出題目定制輸出規則分情況 if/else 處理

易錯點提醒

  1. B1006 個位輸出規則:輸出 12...n 而非數字本身。如個位是 4 輸出 1234,不是 4
  2. B1006 無前導零:輸入保證無前導零,但內部分解需處理百位/十位為 0 的情況(不輸出對應字符)
  3. B1021 輸入長度:≤1000 位,必須用字符串,不可用 long long 或 double
  4. 輸出順序:B1021 要求按數字升序(0→9),非出現順序
  5. gets 安全性:現代編譯器棄用 gets,建議用 fgets(s, MAXL, stdin) 或 scanf("%1000s", s)

總結

PAT 入門字符串題核心考察:整數與字符串互轉、位分解與重組、計數統計、格式化輸出控制。B1006 鍛煉位分解與條件輸出邏輯,B1021 鞏固字符串作大數容器與計數數組思想。兩題均屬「模擬類」,無複雜算法,關鍵在於邊界條件全覆蓋(如 0、個位數、缺位情況)與輸出格式精確匹配。建議初學者多手寫、多測試邊界用例,建立「字符串即字符數組」的直覺思維。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved