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

PAT甲級/乙級字符串處理專題精解(二):科學計數法/A+B格式/拼寫/密碼修正

     編輯:關於C語言

PAT甲級/乙級字符串處理專題精解(二):科學計數法/A+B格式/拼寫/密碼修正

本文精選 PAT(程序設計能力測試)字符串處理經典題目,涵蓋科學計數法還原、千分位格式化、數字拼寫、密碼混淆字符修正四大高頻考點,提供完整 C++ 解法代碼、核心邏輯解析與邊界處理技巧,適合 PAT 備考與面試刷題強化。

題目一:B1024 / A1073 科學計數法還原(20分)

問題描述

輸入符合正則 [+-][1-9]\.[0-9]+E[+-][0-9]+ 的科學計數法字符串,輸出普通十進制表示,保留所有有效位(含尾部0)。指數絕對值 ≤ 9999,長度 ≤ 9999。

核心邏輯

  1. 解析符號、尾數部分(小數點前1位、小數點後若干位)、指數符號、指數值
  2. 指數為正:小數點右移,不足補0
  3. 指數為負:小數點左移,前面補0,格式 0.00xxx
  4. 指數為0:直接輸出尾數

關鍵代碼片段

// 統一處理邏輯
int pos = str.find('E');
string sign = (str[0] == '-') ? "-" : "";
string mantissa = str.substr(1, pos-1);  // 去符號的尾數
int exp = stoi(str.substr(pos+2));       // 指數值
char expSign = str[pos+1];               // '+' 或 '-'

if (exp == 0) { cout << sign << mantissa; }
else if (expSign == '-') {
    cout << sign << "0.";
    for (int i=0; i 0
    for (int i=0; i

題目二:A1001 A+B Format(20分)

問題描述

輸入兩整數 a,b(|a|,|b|≤1,000,000),輸出和的標準千分位格式(每3位一逗號,不足4位不加逗號)。

核心邏輯

  1. 計算 sum = a+b,處理負號
  2. 反向提取數字存入數組
  3. 逆序輸出,每3位插入逗號(非最高位)

代碼實現

int sum = a + b;
if (sum < 0) { printf("-"); sum = -sum; }
int digits[20], len = 0;
do { digits[len++] = sum % 10; sum /= 10; } while (sum);
for (int i = len-1; i >= 0; i--) {
    printf("%d", digits[i]);
    if (i > 0 && i % 3 == 0) printf(",");
}

題目三:A1005 Spell It Right(20分)

問題描述

輸入非負整數 N(≤10¹⁰⁰),輸出各位數字之和的英文拼寫(零到九),單詞間單空格。

代碼實現

char* words[10] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
string s; cin >> s;
int sum = 0;
for (char c : s) sum += c - '0';
int digits[20], len = 0;
do { digits[len++] = sum % 10; sum /= 10; } while (sum);
for (int i = len-1; i >= 0; i--) {
    printf("%s", words[digits[i]]);
    if (i) printf(" ");
}

題目四:A1035 Password(20分)

問題描述

輸入 N 個賬號(用戶名 密碼),將密碼中混淆字符替換:1→@, 0→%, l→L, O→o。輸出修改過的賬號數及詳情;無修改時按單複數輸出特定句子。

代碼實現

struct Account { string name, pwd; bool changed; } acc[1005];
int n, cnt = 0; cin >> n;
for (int i=0; i> acc[i].name >> acc[i].pwd;

for (int i=0; i

字符串處理通用技巧總結

技巧應用場景代碼模式
字符串作數組處理大整數、超長輸入string s; s[i]-'0'
反向提取數字格式化輸出、進制轉換do{d[len++]=n%10;n/=10;}while(n);
查找分隔符科學計數法、IP解析pos=find('E'); substr(0,pos)
字符級遍歷修改密碼混淆、脫敏for(char& c: s) { if(...) c=...; }
邊界情況單獨處理0值、負號、空串if(sum==0) 特判

總結

PAT 字符串處理題核心考察:大數字符串運算、格式化輸出控制、字符級精確操作、邊界條件全覆蓋。本文四題涵蓋了科學計數法還原(指數移位邏輯)、千分位格式化(反向分組)、數字拼寫(求和+拆分)、密碼修正(字符映射+統計)四大經典模式。建議讀者重點掌握「字符串作數組」、「反向提取數字」、「分隔符分割」三大通用技巧,舉一反三應對變體題目。

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