1. 程式人生 > >C++標準輸入輸出格式控制(進位制)

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