2013-04-13 207 views
4

我需要將兩個整數轉換爲兩個數字數組,因此例如544將變爲arr[0] = 5, arr[1] = 4, arr[2] = 4將整數轉換爲數組數組

我發現了一些算法,但他們創建了新的數組,並返回它。我將不得不爲這兩個數組分配這個內存,所以我想通過引用傳遞兩個整數並直接對它們進行處理。

我想我可以做到這一點,因爲這些整數實際上是模板類型,所以它們應該是可以改變的。這就是爲什麼我在這裏添加C++標籤的原因。

+0

? –

+1

「分成兩組數字,例如」 - 在你的例子中只有一個數組。你有問題嗎? –

+1

您需要通過'%'瞭解模數除法(「餘數」)。你會讓它的編碼速度超過你提出問題的速度。 –

回答

7

就使用這樣的事情:

int n = 544; // your number (this value will Change so you might want a copy) 
int i = 0; // the array index 
char a[256]; // the array 

while (n) { // loop till there's nothing left 
    a[i++] = n % 10; // assign the last digit 
    n /= 10; // "right shift" the number 
} 

注意,這會導致相反的順序返回的數字。這可以很容易地通過修改i的初始值以及根據您想要確定值的長度的增量/減量來更改。


(佈雷特·黑爾)我希望海報不介意,但我想我會添加一段代碼我使用的這種情況下,因爲它不容易正確判斷的十進制數字前的數轉化率:

{ 
    char *df = a, *dr = a + i - 1; 
    int j = i >> 1; 

    while (j--) 
    { 
     char di = *df, dj = *dr; 
     *df++ = dj, *dr-- = di; /* (exchange) */ 
    } 
} 
+0

如果你想要的實際字符比'a [i ++] = n%10 '應改爲'a [i ++] ='0'+(n%10)' –

1

調用整數a

要獲得a個位數,a % 10

要改變a下來,幾十是個位數,a/10

要知道,當你做,a == 0

要懂得大的陣列需要放在第一位,min(ceil(log(a+1, 10)), 1)(爲了說服自己這可行,請在計算器中嘗試對數部分)如果沒有多個參數日誌,請使用標識log(x,y) == log(x)/log(y)

+0

通常只需要重複除以10來預先確定結果的長度就更簡單了。可能不會比使用日誌效率低,並且更容易理解/驗證。 –

+0

@熱舔或者你可以只使用'矢量'作爲一切,再也不用擔心你的數組長度是否合適:) – Patashu

4

一個簡單的解決辦法是:

int i = 12312278; 

std::vector<int> digits; 

while (i) 
{ 
    digits.push_back(i % 10); 

    i /= 10; 
} 

std::reverse(digits.begin(), digits.end()); 

,或者串基於(ⅰ> = 0)

for (auto x : to_string(i)) 
    digits.push_back(x-'0'); 
+0

乾淨的想法。雖然這對'c'不起作用。不知道爲什麼這個問題被標記爲「c」以及「C++」。 – Mario

0

,如果你使用的是C++可以做這樣的事情:你使用的是哪個,C或C++

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

int main() 
{ 

    int a=544; 
    stringstream str; 
    str << a; 
    string arr; 
    str>>arr; 
    for(int i=0; i<arr.length(); i++) 
    { 
     cout << arr[i]; 
    } 
    system("pause"); 
    return 0; 
}