不用sprintf函数,将数字转换为字符串

1az98你好 2011-10-06 04:40:02
贴上完整代码,求大家拍砖
#include <stdio.h>
#include <math.h>
#define FALSE 0
#define TRUE 1

char *intToStr(int,int);

int main()
{
printf(intToStr(-123456,10));
return 0;
}

char *intToStr(int integer,int divisor)
{
int remainder=0,quotient=0,bits=0;
int dividend=abs(integer);
int ltz=FALSE;// Little Than Zero
char *str=NULL;
char *p;

if(divisor< 1 || divisor> 10)
return "";

if(integer< 0)
{
bits++;
ltz= TRUE;
}

for(;;)
{
remainder= dividend% divisor;
quotient= dividend/ divisor;
if(quotient == 0)
{
bits++;
break;
}
else
bits++;
dividend = quotient;
}

dividend= abs(integer);

str= (char *)malloc(sizeof(char)* (bits+ 1));
if(str == NULL)
return "";

*(str+ bits)= '\0';

for(p= str+ bits- 1;p>= (ltz? str+ 1:str);p--)
{
remainder= dividend% divisor;
*p= remainder+ '0';
quotient= dividend/ divisor;
dividend= quotient;
}

if(ltz)
*str='-';

return str;
}
...全文
227 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjjlyyj151 2011-10-06
  • 打赏
  • 举报
回复
++++[Quote=引用 5 楼 keiy 的回复:]
C/C++ code

/*
** itoa(n,s) - Convert n to characters in s
*/
itoa(char * s,int n) {
int sign;
char *ptr;
ptr = s;
if ((sign = n) < 0) /* record si……
[/Quote]
quwei197874 2011-10-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 keiy 的回复:]
引用 3 楼 luciferisnotsatan 的回复:
itoa函数。


C/C++ code


/*
** itoa(n,s) - Convert n to characters in s
*/
itoa(char * s,int n) {
int sign;
char *ptr;
ptr = s;
if ((sign = n) < 0) /……
[/Quote]++
aizibion 2011-10-06
  • 打赏
  • 举报
回复
char* itoa_own(char* str, unsigned int val)
{
if (!str)
{
return NULL;
}

char p[32] = {0};
char t_index = '0';

int id = val%10;
p[0] = t_index + id;

int i = 1;
while (val>9&&i<32)
{
val = val/10;
id = val%10;
p[i++] = t_index + id;
}

p[31] = 0;
int len = strlen(p);
for(int j = len-1,k = 0;j>=0;j--)
{
str[k++] = p[j];
}
str[len] = '\0';
return str;
}
柯本 2011-10-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]
itoa函数。
[/Quote]

/*
** itoa(n,s) - Convert n to characters in s
*/
itoa(char * s,int n) {
int sign;
char *ptr;
ptr = s;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
do { /* generate digits in reverse order */
*ptr++ = n % 10 + '0'; /* get next digit */
} while ((n = n / 10) > 0); /* delete it */
if (sign < 0) *ptr++ = '-';
*ptr = '\0';
reverse(s);
}
AnYidan 2011-10-06
  • 打赏
  • 举报
回复

#include <stdio.h>
/* printd: print n in decimal */
void printd(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10)
printd(n / 10);
putchar(n % 10 + '0');
}



不能处理最大负值
luciferisnotsatan 2011-10-06
  • 打赏
  • 举报
回复
itoa函数。
Linux-Torvalds 2011-10-06
  • 打赏
  • 举报
回复
char a[SIZE];
unsinged mod = 10;
for (i = 0; i < SIZE; i++) {
while(i--)
mod *= 10;
a[i] = num % mod - '0';
}
尘缘udbwcso 2011-10-06
  • 打赏
  • 举报
回复
#include <malloc.h>

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧