请教怎么用递归法把一整数转成字串。如2345->"2345"

gwolf 2003-08-22 08:47:50
怎么递归啊?
...全文
101 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbh0360 2003-08-24
  • 打赏
  • 举报
回复
没意思,非要低归干什么
leafxx 2003-08-23
  • 打赏
  • 举报
回复
/* atoi: 将字符串s转换成整数 */

int atoi (char s[])
{
int i,n;

n=0;
for (i=0; s[i]>='0'&&s[i]<='9'; ++i)
n=10*n+(s[i]-'0');
return n;
}
Wendydd 2003-08-23
  • 打赏
  • 举报
回复
不得不说一下
玩一下
没效率的 :)
Wendydd 2003-08-23
  • 打赏
  • 举报
回复
:)
最终递归版本
没有全局变量
可以处理负数

#include <iostream>

using namespace std;

void
recursion_itoa(int src, char *buffer)
{
if (src < 0) {
*buffer = '-';
recursion_itoa(0 - src, buffer + 1);
} else if (src >= 0 && src <= 9) {
*buffer = src + '0';
*++buffer = 0;
} else {
recursion_itoa(src / 10, buffer);
int len = strlen(buffer);
buffer[len] = src % 10 + '0';
buffer[len + 1] = 0;
}
}

int main(int argc, char **argv)
{
char buffer[32];

recursion_itoa(12345, buffer);
cout << buffer << endl;

recursion_itoa(0, buffer);
cout << buffer << endl;

recursion_itoa(-12345, buffer);
cout << buffer << endl;

recursion_itoa(1, buffer);
cout << buffer << endl;

system("PAUSE");
return 0;
}
Wendydd 2003-08-23
  • 打赏
  • 举报
回复
#include <iostream>

using namespace std;

char*
recursion_itoa(int src, char *buffer)
{
if (src >= 0 && src <= 9) {
*buffer = src + '0';
} else {
recursion_itoa(src / 10, buffer);
buffer[strlen(buffer)] = src % 10 + '0';
buffer[strlen(buffer) + 1] = 0;
}

return buffer;
}

int main(int argc, char **argv)
{
char buffer[32];
cout << recursion_itoa(12345, buffer) << endl;

system("PAUSE");
return 0;
}
fogeye 2003-08-23
  • 打赏
  • 举报
回复
千万不要养成什么都自己动手的坏毛病
mme 2003-08-23
  • 打赏
  • 举报
回复
寒~
这样的转换还用得着递归吗?
把每一位都加'0'不就行了嘛!
okbody 2003-08-23
  • 打赏
  • 举报
回复
汗!
有现成的函数啊
normalnotebook 2003-08-22
  • 打赏
  • 举报
回复
如果你是用来训练,是可以的;
但在实际中,是非常不适合的,用sprintf()和 itoa()两个函数就可以实现啊
Dragon132 2003-08-22
  • 打赏
  • 举报
回复
已经可以了,自己看看吧

#include <stdio.h>
char str[10];
char *p=str;

changestr(int n)
{
int m;

p=str;
m=n%10;
n=n/10;
if(n!=0)
{
changestr(n);
}
*p++=m+'0';
}

main()
{
int n=2345;
changestr(n);
*p='\0';
puts(str);
}
leialen 2003-08-22
  • 打赏
  • 举报
回复
char iString[100];
static i = 0;

int myItoa(int a)
{

if(a > 10)
{
myItoa(a/10);
}
iString[i++] = (a%10)+0x30;

}


int main()
{
char *pStr;
int a = 12345;
pStr = iString;
myItoa(a);
printf("%s",pStr);
}
能凑或用,不过全局变量不好,最好少用:)
chxinheifeng 2003-08-22
  • 打赏
  • 举报
回复
void fun(int x,char * pC,int iLay,int& iMax)
{
if (x < 10)
{
iMax = iLay;
*(pC+iMax-iLay) = '0' + x;
}
else
{
int y,z;
z=x;
x/=10;
y=z-x*10;
iLay ++;
fun(x,pC,iLay,iMax);
iLay --;
*(pC+iMax-iLay) = '0' + y;
*(pC+iMax-iLay+1) = '\0';
}
}
void main()
{
int iMax=0;
int iLay=1;
int x=2345;
char pc[100]="";
fun(x,pc,iLay,iMax);
printf(pc);
}
如果反序输出可以减少参数如2345 输出 "5432",对于pc可以用全局变量代替
最简单的使用 itoa 自己写多麻烦
gwolf 2003-08-22
  • 打赏
  • 举报
回复
1a%10=a??
oopig 2003-08-22
  • 打赏
  • 举报
回复
为什么要递归呢?sprintf不行吗?
zyzyandzyzy 2003-08-22
  • 打赏
  • 举报
回复
如果是一位的数,根据ASCII码转换,如果不是,除10做为参数递归,似乎要定义一个全局变量。
大致就是这样,代码懒得写了,包涵包涵。
我现在要提问却没有分数,所以四处要分。

69,369

社区成员

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

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