PAT-ADVANCED1001——A+B Format
阿新 • • 發佈:2018-11-11
我的PAT-ADVANCED程式碼倉:https://github.com/617076674/PAT-ADVANCED
原題連結:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400
題目描述:
題目翻譯:
1001 格式化輸出A + B
計算a + b且以標準形式輸出其和,該標準形式就是——所有的陣列以3個為一組被逗號分隔,除非數字位數小於4。
輸入格式:
每個輸入檔案包含一個測試用例。每個測試用例包含兩個整數a和b,-10 ^ 6 <= a, b <= 10 ^ 6。數字由一個空格分隔。
輸出格式:
對每個測試用例,你需要在一行中輸出a和b的和。且該和必須以標準形式輸出。
輸入樣例:
-1000000 9
輸出樣例:
-999,991
知識點:字串
思路:由低位到高位3位一組分組,處理好負號和最後的逗號問題
時間複雜度和空間複雜度的分析對本題意義不大。
對於和為0,特殊處理。
不管是負數還是正數,統一轉換成正數處理,並由一個標記變數flag來標記是否為負數。由低位到高位3個一組填充進字元陣列中,組與組之間用','分隔。
這時候字元陣列的最後一個字元可能是',',還需要考慮和是負數的情況額外新增'-'。
C++程式碼:
#include<iostream> #include<cstring> int main() { int a, b; scanf("%d %d", &a, &b); int sum = a + b; if(sum == 0) { //對和為0的情況做特殊處理 printf("0\n"); return 0; } bool flag = true; //flag用以標記和是否是負數 if(sum < 0) { flag = false; sum *= -1; } char result[15]; int index = 0; //記錄char陣列result的下標 int circle = 0; //記錄迴圈,每3個數字新增一個"," while(sum > 0) { result[index++] = sum % 10 + '0'; circle++; sum /= 10; if(circle % 3 == 0) { result[index++] = ','; circle = 0; } } if(result[index - 1] == ',') { if(!flag) { result[index - 1] = '-';//如果末位是",",且和是負數,將","替換為"-",並新增"\0"結束標記 result[index] = '\0'; } else { result[index - 1] = '\0';//如果末位是",",且和不是負數,將","替換為"\0"結束標記 } } else { if(!flag) { //如果末位不是",",且和是負數,新增"-" result[index++] = '-'; } result[index] = '\0'; //在末位新增"\0"結束標記 } for(int i = strlen(result) - 1; i >= 0; i--) { printf("%c", result[i]); } printf("\n"); return 0; }
C++解題報告: