2013-05-12 51 views
0

我的代碼在C中遇到了一些麻煩。它不會像原來那樣轉換數字。 這是將給定數字轉換爲具有不同基數的另一個數字的歐幾里得算法。 「精度」是逗號後的數字。通過歐幾里得算法和霍納方法轉換數字

static char* euclid(float number, int base, int precision) 
{ 
    //create a buffer for holding the resulting string 
    char* resultString = createBuffer(number, base, precision); 
    int numbTemp; 
    int numbDiv; 

    float maxExponent = 0; 

    while (number >= pow((float)base, (float)maxExponent)) { 
     maxExponent++; 
    } 

    maxExponent--; 

    if (maxExponent < 0) { 

     maxExponent = 0; 
    } 

    while (maxExponent >= 0) { 
    numbDiv = number/pow(base, maxExponent); 
    *resultString += converIntToChar(numbDiv); 
    numbTemp = numbDiv * pow(base, maxExponent); 
    number -= numbTemp; 
    maxExponent--; 
    if(maxExponent < 0 && precision >0) { 
     *resultString += ","; 
     while(precision > 0) { 
      numbDiv = number/pow(base, maxExponent); 
      numbTemp = numbDiv * pow(base, maxExponent); 
      *resultString += convertIntToChar(numbDiv); 
      number = number - numbTemp; 
      maxExponent--; 
      precision--; 
     } 
    } 
    } 
    return resultString; 
} 

轉換編號以字符:

static char convertIntToChar(int number) { 
    if (0 <= number && 10 > number) { 
      return number + '0'; 
    } 
    else if (16 > number) { 
      return number - 10 + 'A'; 
    } 
    else { 
      return '\0'; 
    } 
} 

爲「數字」的輸入總是一個號碼到基座10我與170嘗試了例如並且作爲結果,我想有170 (它是到底座10)作爲一個數字返回到底座16,它是AA。 但我得到的結果是 。你能幫我找到問題嗎?除了我使用Linux。所以我使用gcc編譯器。 另外我試圖實施霍納的方法,我得到了與上面相同的結果( ) 我的霍納方法的代碼。

static char* horner(float number, int base, int precision) { 

    // create a buffer for holding the resulting string. 
    char* resultString = createBuffer(number, base, precision); 
    int numbDiv = 0; 
    int numbTemp = 0; 
    int numbConv = 0; 

    do { 
     numbDiv = number/base; 
     numbTemp = numbDiv * base; 
     numbConv = number - numbTemp; 
     number = numbDiv; 
     *resultString += convertIntToChar(numbConv); 
    } while (number != 0); 

    return resultString; 
} 

問候 萩

+0

當我用逗號輸入數字時,我再次得到這個符號 。舉個例子,當我輸入15741.233(到底部10)時,我返回3D7D 3(以16爲底,精度爲4(逗號後的數字)),但它應該是3D7D.3BA5。我不知道它爲什麼這樣做。有誰知道爲什麼? – Hagi 2013-05-12 16:43:21

+0

我沒有使用單引號字符。現在,我得到了3D7D.3的結果,但仍然有3位數字丟失。有誰知道爲什麼? – Hagi 2013-05-12 16:49:41

回答

0

你的問題是在什麼是*resultString混亂;您應該將精度放在resultString [idx]中,其中idx是下一個索引,但您所做的只是將值添加到第0個字符,因爲* resultString指向它;

所以做到這一點:

char * resultString = createBuffer(number, base, precision); 

的罰款;

*resultString += converIntToChar(numbDiv); 

是無意義

聲明一個索引變量;

char * resultString = createBuffer(number, base, precision); 
size_t idx = 0; 

現在以後:

resultString[idx++] = convertIntToChar(numbDiv); 

,並在一段時間();循環:

*resultString += ","; /* ??? */ 

變得

resultString[idx++] = ','; /* note single character quotes */ 

和* resultString的其他實例的類似的處理;

一旦該功能即將復出(即resultString準備好),你仍然需要一個終止空字符:

resultString[idx++] = 0; 
return; 

這也意味着你的createBuffer應返回內存佔C的NULL字符字符串結尾。

+0

謝謝你的建議。它正在工作。你能幫我解決另一個問題嗎? 例如,數字15741.233(到基數10)應該返回爲3D7D.3BA5(到基數16)。 我試過了,因此得到了3D7D 3。你知道我的代碼爲什麼這麼做嗎? – Hagi 2013-05-12 16:35:11

+0

我選擇的精度爲4. – Hagi 2013-05-12 16:38:53

+0

我不明白 了。這是因爲我沒有做單個字符引號。^^ 但是現在我得到了3D7D.3並且還有3位數字丟失。你有線索爲什麼? – Hagi 2013-05-12 16:48:09

0

*resultString += some char不是將字符串聯到一個字符串上(如您所期望的),而是將some char的整數值添加到resultString的第一個字符中。