整数转换为字符串
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;
}