2011-10-03 66 views
-3

請不要打消這個問題..我對C++很陌生,真的很想了解我工作的代碼。困惑於我的代碼如何工作,並想了解其中的邏輯

// bintodec.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int main(){ 
     string inp; 
     int dec = 0; 
     char base; 
     cout << "Input a number: "; 
     cin >> inp; 
     cout << "Input the base your number is in: "; 
     cin >> base; 
     for(int i = inp.length()-1, j = 0; i >= 0; i--, ++j) dec += (inp[i]-48) * pow((float)base-48, j); 
     cout << "Your number in base 10 is: " << dec <<endl; 
     system("pause"); 
return 0; 
} 

我真的很想理解這個FOR LOOP如何運行INPUT NUMBER和BASE,然後得到答案。

所以可以說我輸入110 BASE 2 PRINT:6

*如何for循環都做

的感謝!

+0

請搜索並閱讀C++教程。 –

+3

很難說出你在問什麼。你只是想知道'for'循環做了什麼?這個問題很可能會被封閉,但原因只是在不知道自己不明白的情況下回答是不可能的。 –

+0

@BrendanLong「我真的很想理解這個FOR LOOP如何運行INPUT NUMBER和BASE,然後得到答案。」不可能? –

回答

1

他們正在將ASCII輸入值插入inp,並通過減去該字符的ASCII偏移量來轉換爲實際的十進制等值。那時,他們只是將輸入小數點的每個位置加到小數點位置的基數上。例如,對於多個輸入作爲BASE-2,在一個二進制數的每個數字是等效於以下:

2^2 2^1 2^0 
| | | 
1 1 0 

因此,將其轉換爲BASE-10中,可以添加高達(1 * 2^2)+(1 * 2^1),其等於4 + 2 = 6。

如果你有輸入十六進制數(即,BASE-16),0xA5的說,這將如下所示:

16^1 16^0 
    |  | 
    A  5 

然後這將等於10 * 16^1 + 5 * 16^0,其等於160 + 5 = 165

2
for(int i = inp.length()-1, j = 0; i >= 0; i--, ++j) 
    dec += (inp[i]-48) * pow((float)base-48, j); 

48是'0'的價值,他們應該是連續的最多'9'這將是57.你應該能夠工作,如何工作的考慮到這一點做。

0

'0'= 48,所以此循環從末尾開始拾取數字,將字符轉換爲數字,將基數乘以正確的功率並將結果相加。

0

48只是將ASCII輸入轉換爲數字表示,'0'= 48,'1'= 49等等.for循環正在做的是遍歷每個輸入的字符,將其提升到輸入的基本功率,並添加它使一個小數(基數爲10)的答案。

如果你想知道爲什麼數學它的工作原理,檢查http://en.wikipedia.org/wiki/Radix

3657在例如3×6 =^4 + 6×6^3 + 5×6^2 +十進制7x6基地6。