C++標準輸入輸出格式控制(進位制)
從HDU--2057題說起
剛開始做,以為這題是大數加減問題,試了半天發現太複雜,要考慮的因素太多,後來知道long long能表示16位十六進位制的整數,題目中為15位,可以直接加減,百度了一下輸入輸出十六進位制的格式,還有十六進位制的負數輸出的是其補碼,故要判斷結果是否是負數,且預設輸出十六進位制的格式中,字母為小寫,用setiosflags(ios::uppercase)
能使輸出的十六進位制字母變成大寫 ( uppercase變成lowercase,大寫變小寫)
#include <iostream> #include <iomanip> using namespace std; int main() { long long x,y; while(cin>>hex>>x>>y) //輸入十六進位制前加hex { x+=y; if(x<0) { cout<<"-";x=-x;} cout<<setiosflags(ios::uppercase)<<hex<<x<<endl; } return 0; }
總結:
1、數的進位制
預設進位制:
預設狀態下,資料按十進位制輸入輸出。如果要求按八進位制或十六進位制輸入輸出,在cin或cout中必須指明相應的資料形式,oct為八進位制,hex為十六進位制,dec為十進位制。舉例:
int i, j, k, l;
cout<<”Input i(oct), j(hex), k(hex), l(dec):”<cin>>oct>>i; //輸入為八進位制數
cin>>hex>>j; //輸入為十六進位制數
cin>>k; //輸入仍為十六進位制數
cin>>dec>>l;//輸入為十進位制數
cout<<”hex:”<<”i=”<<hex<cout<<”dec:”<<”j=”<<dec<cout<<”oct:”<<”l=”<<oct<cout<<dec<//恢復十進位制輸出狀態【執行結果】:
(1)輸出提示:Input i(oct), j(hex), k(hex), l(dec):
(2)此時從鍵盤輸入: 032 0x3f 0xa0 17
(3)輸出結果為:hex:i=1a
dec:j=63 k=160
oct:l=21幾點說明:
使用不帶.h的標頭檔案時,必須在cin中指明數制,否則從鍵盤輸入時,不認八進位制和十六進位制數開頭的0和0x標誌。指明後可省略0和0x標誌。
進位制控制只適用於整型變數,不適用於實型和字元型變數。
輸入資料的格式、個數和型別必須與cin中的變數一一對應,否則不僅使輸入資料錯誤,而且影響後面其他資料的正確輸入。
在cin或cout中指明數制後,該數制將一直有效,直到重新指明使用其他數制。
◆ 2、資料間隔
常用設定方法:輸出空格符或回車換行符。
指定資料輸出寬度:用C++提供的函式setw()指定輸出資料項的寬度。setw()括號中通常給出一個正整數值,用於限定緊跟其後的一個數據項的輸出寬度。如:setw(8)表示緊跟其後的資料項的輸出佔8個字元寬度。
舉例:
int i=2, j=3;
float x=2.6, y=1.8;
cout<cout<cout<
則輸出結果為:
2 3
6
2.6 1.8說明:
如果資料的實際寬度小於指定寬度,按右對齊的方式在左邊留空,如果資料的實際寬度大於指定寬度,則按實際寬度輸出,即指定寬度失效。
setw()只能限定緊隨其後的一個數據項,輸出後即回到預設輸出方式。
使用setw()必須在程式開頭再增加一句: #include