必须写一个函数,其中v [0]是数字的长度,而v [1] ... v [v [0]]是反转数字的表示,即对于n = 123,v这是我到目前为止所写的内容,它仅适用于3位数字。为什么?
char* build_number(int n)
{
int i=1;
char *v;
v=(char*)calloc(1,sizeof(char));
while(n>0)
{
v[i]='0'+n%10;
n/=10;
v=realloc(v,i);
i++;
}
v[0]='0'+(i-1);
return v;
}
答案 0 :(得分:0)
可能的解决方案:
char * _my_itoa( int i )
{
static char res[11]; // buffer for max 4G value
char * p = res + sizeof res - 1; // pointer to end of buffer
*p-- = 0; // 0 - end of string
while ( i > 0 )
{
*p-- = (char)( ( i % 10 ) + '0' );
i /= 10;
}
return p;
}
答案 1 :(得分:0)
试试这个:
// Assuming n is not negative
if (n == 0) {
char *v = malloc(2 * sizeof(char));
v[0] = '1';
v[1] = '0';
return v;
}
// Count the number of digits
int temp = n;
int count = 0;
while (temp > 0) {
count++;
temp /= 10;
}
char *v = malloc((count + 1) * sizeof(char));
v[0] = count + '0';
int pos = count;
while (n > 0) {
v[pos] = (n % 10) + '0';
n /= 10;
pos--;
}
return v;
答案 2 :(得分:0)
假设您仅限于使用C而不是C ++,这应该可以解决问题。您尚未指定是否或如何支持负值,因此您需要考虑这一点。如果您不打算支持负值,则您的函数应接受unsigned int
而不是int
(您必须更改初始内存分配的大小以考虑可能的增加位)。
#include <stdio.h>
#include <stdlib.h>
char* buildNumber(int n)
{
int count = 0;
char* v = calloc(11, sizeof(char));
for (int i = n; i > 0; i /= 10) {
v[++count] = i % 10 + '0';
}
v[0] = count + '0';
return realloc(v, count + 1);
}
int main()
{
char* v = buildNumber(1800);
printf("%s", v); /* Prints 40081 */
free(v);
}