PAT1001-A+B Format
阿新 • • 發佈:2020-10-10
題目描述
1001 A+B Format (20分)
Calculate a+b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).
Input Specification:
Each input file contains one test case. Each case contains a pair of integers a and b where −106≤a
Output Specification:
For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.
Sample Input:
-1000000 9
Sample Output:
-999,991
作者
CHEN, Yue
單位
浙江大學
程式碼長度限制
16 KB
時間限制
400 ms
記憶體限制
64 MB
題目分析
整體分析:
題目的要求是要求進行兩個整數的相加運算,這一點並不困難,本題主要卡的地方在於要進行題目所要求的格式化輸出,同時還要注意本題輸入的兩個整數最大皆為10的六次方,即最大為七位數,考慮最極端情況兩個數均為1000000,即兩數相加最大值為2000000也為七位數,同時題目中要求低於四位數直接輸出即可(當前考慮的皆是在相加所得數為正整數的情況),假使相加為負值,先輸出減號然後按照正整數的格式進行輸出即可。
如何進行輸出?
可以考慮將整數分成三種進行輸出,分別是7位數,4-6位數以及4位數以下
題目解答
#include <iostream> #include <iomanip> using namespace std; int main() { int a = 0; int b = 0; cin >> a >> b; int sum = a + b; //當兩數相加值為負數時 if (sum < 0) { //先輸出負號 cout << "-"; //然後將負數轉換成正數 sum = -sum; } //當相加結果為七位數時 if (sum >= 1000000) { //注意:setfill()函式所要填充的字元是在數字之前填充 //如七位數的中間三個數字是010,最後取餘得到的值為10, //這時想要完美輸出010就需要使用setfill()函式 //在前面填充一個‘0’ cout << sum / 1000000 << "," << setw(3) << setfill('0') << (sum / 1000) % 1000 << "," << setw(3) << setfill('0') << sum % 1000; } //當相加結果為4-6位數時 else if (sum >= 1000) { cout << sum / 1000 << "," << setw(3) << setfill('0') << sum % 1000; } //當相加結果為四位數以下時 else cout << sum; system("pause"); return 0; }
檢測結果:
思考總結:
在本題的整數格式化輸出中,用到了setw()和setfill()函式,接下來介紹這兩種函式的用法:
- 在C++中,setw(int n)用來控制輸出間隔。
- 例如:
- cout<<'s'<<setw(8)<<'a'<<endl;
- 則在螢幕顯示
- s a
- //s與a之間有7個空格,加上a就8個位置,setw()只對其後面緊跟的輸出產生作用,如上例中,表示'a'共佔8個位置,不足的用空格填充。若輸入的內容超過setw()設定的長度,則按實際長度輸出
- setw()預設填充的內容為空格,可以setfill()配合使用設定其他字元填充。
- 如:
- cout<<setfill('*')<<setw(5)<<'a'<<endl;
- 則輸出:
- ***a //4個和字元a共佔5個位置。
- 所謂域寬,就是輸出的內容(數值或字元等等)需要佔據多少個字元的位置,如果位置有空餘則會自動補足。比如我們要設定域寬為2,那麼當輸出一位數1的時候輸出的就是“ 1”,即在1前面加了一個空格。空格和數字1正好一共佔用了兩個字元的位置。
- 我 們在設定域寬和填充字元的時候要注意幾點:
- ①設定域寬的時候應該填入*整數*,設定填充字元的時候應該填入字元。
- ②我們可以對一個要輸出的內容同時設定域寬和 填充字元,但是設定好的屬性僅對下一個輸出的內容有效,之後的輸出要再次設定。即 cout <<setw(2) <<a <<b;語句中域寬設定僅對a有效,對b無效。
- ③setw和setfill 被稱為輸出控制符,使用時需要在程式開頭寫上#include "iomanip.h",否則無法使用。
#include <iostream>
#include<iomanip>
using namespace std;
int main()
{
cout<<'s'<<setfill('*')<<setw(8)<<'a'<<endl;
return 0;
}
輸出結果如下: