2015-04-16 80 views
0

作爲我最後一個問題的後續here將A1轉換爲R1C1格式

我正在嘗試與上一個問題相反。也就是說,將表單A1的輸入轉換爲表單R1C1的輸出(更多內容請看我的最後一個問題)。

我會解釋我的算法。假設我們需要將BC23轉換爲R23C55。我從BC23中提取'BC'和'23',並將它們存儲在單獨的數組中。我做了另一個數組,它們分別爲A,B,C存儲值1,2,3 ...等等,當它們進入輸入時。例如,我的數組將包含2和3分別作爲B和C的前兩個元素。然後我使用一些數學將其轉換爲數字,在這種情況下爲55。

這裏是完整的代碼。

#include <stdio.h> 
#include <string.h> 
#include <math.h> 

int main() 
{ 
    char str[5],col[5],row[5]; 
    int i=0,j=0,k=0,lenOfstr,lenOfcol; 
    scanf("%s",str); 

    while(str[i]>='A'&&str[i]<='Z') 
    { 
     col[j]=str[i]; 
     i++; 
     j++; 
    } 
    col[j]='\0'; 
    lenOfstr=strlen(str); 
    lenOfcol=strlen(col); 

    int ascCol[lenOfcol]; 

    for(i=lenOfcol;i<lenOfstr;i++) 
    { 
     row[k]=str[i]; 
     k++; 
    } 
    row[k]='\0'; 

    for(i=0;i<lenOfcol;i++) 
    { 
     ascCol[i]=col[i]-64; 
    } 

    int sum=0; 
    for(i=0;i<lenOfcol;i++) 
    { 
     sum=sum+(ascCol[i]*pow(26,lenOfcol-i-1)); 
    } 

    printf("%d",sum); 

    return 0; 
} 

在我無法調試的最後一段代碼中有一個小錯誤。

int sum=0; 
    for(i=0;i<lenOfcol;i++) 
    { 
     sum=sum+(ascCol[i]*pow(26,lenOfcol-i-1)); 
    } 

    printf("%d",sum); 

輸入Z應該給我輸出26,AA應該給27.但是我的代碼給出了26。此後,輸出始終比正確輸出少1; BC給54而不是55.

有人幫我。

+0

這聽起來像一個浮點問題。有些數字不能完全表示,所以當它們被提升爲另一種數據類型時,數字可能是錯誤的。例如,double - > int。您可能需要使用一個bignum庫。 –

+0

我沒有在任何地方使用浮點 –

+1

'pow'返回一個浮點數 –

回答

4

嘗試改變的總和,這樣的:

sum = sum * 26 + ascCol[i] 

這樣就不必擔心意外的浮點舍入行爲造成的事實,pow返回一個浮點數等問題。

注意:您可以簡單的整個程序,只是這樣的:

#include <stdio.h> 

int main() 
{ 
    char str[5]; 

    scanf("%s", str); 

    int i = 0; 
    int sum = 0;  
    while(str[i] >= 'A' && str[i] <= 'Z') 
    { 
     sum = sum * 26 + (str[i] - 'A'); 
     i++; 
    } 

    printf("%d", sum); 

    return 0; 
} 
+0

是的,做了這項工作,不知道pow返回浮點數 –