2016-10-24 326 views
2

所以我有這個任務編寫C++程序轉換二進制,八進制或十六進制數轉換爲十進制,我做到了,這是我的代碼:二進制,八進制,十六進制到十進制程序

#include <iostream> 
#include <string> 
#include <cmath> 
using namespace std; 

long two2ten(string s) 
{ 
    int m = 0; 
    for (size_t i = 0; i < s.size(); i++) 
    { 
     m = 2 * m + (s[i] - '0'); 
    } 
    return m; 
} 

long oct2dec(int n) 
{ 
    long int m = 0, i = 0; 
    while (n != 0) 
    { 
     m = m + (n % 10)* pow(8, i++); 
     n = n/10; 
    } 
    return m; 
} 
long hex2dec(string s) 
{ 
    long result = 0; 

    for (size_t i = 0; i < s.length(); i++) 
    { 
     if (s[i] >= 48 && s[i] <= 57) 
     { 
      result += (s[i] - 48)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 65 && s[i] <= 70) { 
      result += (s[i] - 55)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 97 && s[i] <= 102) { 
      result += (s[i] - 87)*pow(16, s.length() - i - 1); 
     } 
    } 
    return result; 
} 

int main() 
{ 
    int k, n; 
    string s; 
    while (cin >> k) 
    { 
     if (k == 2) 
     { 
      cin >> s; 
      cout << two2ten(s) << endl; 
     } 
     else if (k == 8) 
     { 
      cin >> n; 
      cout << oct2dec(n) << endl; 
     } 
     else if (k == 16) 
     { 
      cin >> s; 
      cout << hex2dec(s) << endl; 
     } 
     else 
     { 
      cin >> n; 
     } 
    } 
    return 0; 
} 

現在,它對我來說工作得非常好,但它給我的老師帶來了編譯錯誤(他沒有說爲什麼)。我已經把我的頭靠在牆上幾天了,但我仍然無法弄清楚什麼是錯的。請有人幫我解決這個問題嗎?

+4

如果他不說爲什麼,這是不公平的。你如何編譯它?也許我們可以建議你是否使用一些不尋常的選項。 – BoBTFish

+1

可能會問他他正在使用的編譯器和操作系統嗎? –

+2

你的編譯器/選項是什麼?你的老師是什麼? – wasthishelpful

回答

3

你的問題是,當調用這些pow()函數時,隱式轉換髮生在第二個參數(從size_t到double)。添加static_cast應該有所幫助。

要看到自己的問題,編譯代碼與

-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion 
相關問題