我需要將兩個整數轉換爲兩個數字數組,因此例如544將變爲arr[0] = 5, arr[1] = 4, arr[2] = 4
。將整數轉換爲數組數組
我發現了一些算法,但他們創建了新的數組,並返回它。我將不得不爲這兩個數組分配這個內存,所以我想通過引用傳遞兩個整數並直接對它們進行處理。
我想我可以做到這一點,因爲這些整數實際上是模板類型,所以它們應該是可以改變的。這就是爲什麼我在這裏添加C++標籤的原因。
我需要將兩個整數轉換爲兩個數字數組,因此例如544將變爲arr[0] = 5, arr[1] = 4, arr[2] = 4
。將整數轉換爲數組數組
我發現了一些算法,但他們創建了新的數組,並返回它。我將不得不爲這兩個數組分配這個內存,所以我想通過引用傳遞兩個整數並直接對它們進行處理。
我想我可以做到這一點,因爲這些整數實際上是模板類型,所以它們應該是可以改變的。這就是爲什麼我在這裏添加C++標籤的原因。
就使用這樣的事情:
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) */
}
}
如果你想要的實際字符比'a [i ++] = n%10 '應改爲'a [i ++] ='0'+(n%10)' –
調用整數a
。
要獲得a
個位數,a % 10
要改變a
下來,幾十是個位數,a/10
要知道,當你做,a == 0
要懂得大的陣列需要放在第一位,min(ceil(log(a+1, 10)), 1)
(爲了說服自己這可行,請在計算器中嘗試對數部分)如果沒有多個參數日誌,請使用標識log(x,y) == log(x)/log(y)
)
通常只需要重複除以10來預先確定結果的長度就更簡單了。可能不會比使用日誌效率低,並且更容易理解/驗證。 –
@熱舔或者你可以只使用'矢量
一個簡單的解決辦法是:
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');
乾淨的想法。雖然這對'c'不起作用。不知道爲什麼這個問題被標記爲「c」以及「C++」。 – Mario
,如果你使用的是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;
}
? –
「分成兩組數字,例如」 - 在你的例子中只有一個數組。你有問題嗎? –
您需要通過'%'瞭解模數除法(「餘數」)。你會讓它的編碼速度超過你提出問題的速度。 –