1001 A+B Format (20 分)
本道題需要了解的預備知識:string頭檔案使用方法
中文翻譯:(原題目為英文)
計算a+b并以標準格式輸出,即:每三位加一個 “,” 的格式輸出(若少于四個數字則直接輸出),
輸入格式:
每個輸入檔案包含一個測驗用例,每個用例包含一對整數a和b,其中(-10^6 ≤ a,b ≤ 10^6),數字之間用空格分割,
輸出格式:
對于每個測驗用例,你需要按照格式要求在一行中輸出a+b的計算結果,
輸入樣例:
-1000000 9
輸出樣例:
-999,991
題目決議:
字串處理題,較為簡單,有兩種解題思路,無非都是向字串中添加逗號輸出,如果沒思考過的話,先去思考再繼續往下看!
首先是柳神的方法,我覺得一般人在考場上都想不出來這么”神奇“的運算式,短短幾行代碼一邊判斷一邊輸(不愧是柳神),普通人(我)大概率想到的都是:”先加逗號,再輸出"的形式,但是正向不好判斷逗號的位置,所以從后向前看,每三個數字添加一個逗號,并且需要注意邊界情況(第一位數字),
整體思路如下:
- a+b的結果可能為正數也可能為負數,符號會干擾我們對計算結果的處理(添加逗號),所以需要在最開始先進行符號處理(判斷字串的第一位字符:若為 “-” 輸出負號并洗掉字串中的負號,若為數字說明是正數,不需要處理),
- 字串從后向前遍歷,每三個數字在該數字位上(前)添加一個逗號,

- 注意邊界處理,如果出現以下情況,則不可在首位數字前添加逗號,即條件為:當前位不是字串的第一位(0號位 )且當前位數剛好為三的倍數,

- 處理完成后直接輸出,沒什么好說的,直接上代碼,
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b; //輸入a和b
string s = to_string(a + b); //將a+b的值轉換為字串
if(s[0] == '-') { //處理符號
cout << '-';
s.erase(0, 1);
}
int count = 0; //用于記錄當前位置
for(int i = s.length() - 1; i >= 0; i--){ //添加逗號
count++;
if(count % 3 == 0 && i > 0){
s.insert(i, ",");
}
}
cout << s;
}
全部通過

最后附上柳神的代碼,如果有興趣的話可以研究一下那個“神奇”的運算式,
柳神柳神,永遠滴神,
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ","; // 神秘運算式
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271636.html
標籤:其他
