本文是經過例子學習C++的第四篇,經過這個例子能夠快速入門c++相關的語法。ios
1.乍一看題目很是簡單,簡單思考一下,能夠經過for循環實現:c++
#include <iostream> using namespace std; int main() { int num = 1; for(int i=0;i<64;i++){ num *= 2; } cout<<"2的64次方是"<<num; return 0; }
然而,代碼運行後,獲得的結果是0,什麼?驚掉了下巴,竟然不對?數組
程序運行後效果以下:
學習
2.一番思考下來,應該是2的64次方超過int能表示的範圍了,溢出了就輸出0。spa
那麼用long long
存儲怎麼樣呢?順便輸出2的1次方,直到2的64次方:code
#include <iostream> using namespace std; int main() { long long num = 1; for(int i=0;i<64;i++){ num *= 2; cout<<"2的"<<i+1<<"次方是"<<":"<<num<<endl; } cout<<"2的64次方是"<<num; return 0; }
程序運行後效果以下:
blog
誰來拯救我,仍是不對啊?io
3.看來long long
類型也沒法解決溢出問題for循環
回到問題自己,這是一個乘法計算,計算2的62次方獲得 4611686018427387904
,2的63次方,是這個數字乘以2已經溢出了。考慮一下,咱們如何計算4611686018427387904*2=?入門
能夠用字符數組存儲這個數字,而後計算乘法就能夠了。
#include<iostream> using namespace std; int main(){ char n[32]; int a,b,jin=0; //初始化數組 n[0] = '1'; for(int i=1;i<32;i++){ n[i] = '0'; } //循環64次,每次數組的值乘以2 for(int j=0;j<64;j++){ jin = 0; //從最低位開始,計算乘以2後各個位上的值:當前值 * 2 + 進位,而後轉換爲字符 for(int i=0;i<32;i++){ a = (n[i]-'0') * 2; n[i] = a%10 + jin + '0'; jin = a/10; } } cout<<"2的64次方是:"; for(int i=31;i>=0;i--){ cout<<n[i]; } return 0; }
4.總結
經過該例子,能夠學習:
int
,long
,每一個類型的變量值是有範圍的;+ - * /
運算;0
轉換爲字符'0'
,或者從字符'0'
轉換爲數字0
;