首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

整数变换为字符串

2012-12-30 
整数转换为字符串Problem Description编写一个函数用递归法将一个整数n(-2^31n2^31-1)转换成字符串。例

整数转换为字符串
整数变换为字符串Problem Description

编写一个函数用递归法将一个整数n(-2^31<=n<=2^31-1)转换成字符串。例如;输入483,应输出字符串“483”。

input

输入数据的第一行为一个正整数T, 表示测试数据的组数. 然后是T组测试数据. 每组测试数据输入一个整数n。 

Output

对于每个n,输出转换后的字符串。

Sample Input2
1234
123456789
 Sample Output1234
123456789

我的代码是:
 #include<iostream>
#include<string >
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int a,cnt=0;
char b[10];
cin>>a;
if(a==0) cout<<'0'<<endl;
else
{
while(a>0)
{
b[cnt]=a%10+'0';
cnt++;
a=a/10;
}
for(int j=cnt-1;j>=0;j--) cout<<b[j];
cout<<endl;
}
}
return 0;
}
请问如果用递归的方法该怎么修改?
[解决办法]
#include<iostream>
#include<string >
using namespace std;
int main()
{
int n;
cin>>n;
char*p = new char[120] ;
memset(p,'\0',120) ;
itoa(n,p,10) ;
/*将整数转换称字符串,第一个参数为要转化的整数,第二个参数为转换称的字符串,
第三个参数为转换进制,即第三个参数为10表示按照10进制转换.*/
cout<<p<<endl ;
delete[] p ;
return 0;
}
直接用库函数就好了,没有必要再自己写函数转换。
[解决办法]
大概思路应该是这样的吧:随便写一下啊


fun(n)
{
  if(n<10)
     i=n;             //代表最高位
  else
     i=n%10+f(n/10)*10;  //如果不是最高位,需要把先前的一位*10,因为递归是反着输出的,从最后一个开始输出
}



[解决办法]
额。。你这句:

string s="";

每次调用fun()的时候,s都被初始化成""了,并没有保存先前的值。。
[解决办法]


#include <stdio.h>
#include <stdlib.h>
#include <memory>
void fun(int n,char *str)
{
char *p = str;
if(n != 0)
{
int m = n % 10;
*p++ = m + '0';
n /= 10;
fun(n,p);
}
}

int main()
{
int n;
scanf("%d",&n);
int *a = (int *)malloc(n*sizeof(int));

for(int i = 0; i < n; ++i)
scanf("%d",&a[i]);
for(int i = 0; i < n; ++i)
{
int len = 0;
int num = a[i];
while(a[i])
{
len++;
a[i] /= 10;
}

char *str = (char *)malloc((len+1)*sizeof(char));
memset(str,0,sizeof(str));
fun(num,str);
for(int j = len - 1; j >= 0; --j)
printf("%c",str[j]);
printf("%\n");
free(str);
}
free(a);

return 0;
}

热点排行