我需要将两个整数转换为两个数字数组,例如 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
以及增量/减量来轻松更改,具体取决于您希望如何确定值的长度。
(Brett Hale) 我希望张贴者不介意,但我想我会添加一个用于这种情况的代码片段,因为在转换之前正确确定小数位数并不容易:
{
char *df = a, *dr = a + i - 1;
int j = i >> 1;
while (j--)
{
char di = *df, dj = *dr;
*df++ = dj, *dr-- = di; /* (exchange) */
}
}
一个简单的解决方案是:
int i = 12312278;
std::vector<int> digits;
while (i)
{
digits.push_back(i % 10);
i /= 10;
}
std::reverse(digits.begin(), digits.end());
或者,基于字符串( i >= 0 )
for (auto x : to_string(i))
digits.push_back(x-'0');
调用整数a
。
要获得 的个位a
,a % 10
向下移动a
,所以十位是个位,a / 10
要知道什么时候完成,a == 0
首先要知道您的数组需要多大,min(ceil(log(a+1, 10)), 1)
(为了说服自己这是可行的,请在计算器中尝试它的对数部分。如果您没有多个参数日志,请使用 identity log(x,y) == log(x)/log(y)
)
如果你使用 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;
}