C++用递归的方法把一个整数n转换成字符串可以是任意位的整数

2024-12-03 07:53:16
推荐回答(3个)
回答1:

我试着写了一个出来,希望对你有帮助,我本身也才刚学C++没多久,不知道代码规不规范。必要的地方加了注释

#include
using namespace std;

// 获取数字的位数
int getNumLength(int num)
{
if(num>=10)
{
num/=10;
return 1+getNumLength(num);
}
return 1;
}
const char numChar[]="0123456789";
void tran(int num,char*ch)
{
int length=getNumLength(num);
//用num除以10的length-1次方,获得最高位的数字
//比如123的第一次递归,n=123/10^2=1,第二递归n=23/10^1=2
int n=(int)(num/pow(10,length-1));
if(length>1) // 如果位数大于1,则继续递归
{
*ch=numChar[n];
//将数据源减去10的length-1次方后再进入下次递归
num-=(int)(n*pow(10,length-1));
ch++;//指针自加可以使ch指针指向字符数组的下一个元素
tran(num,ch);
}else
{//如果位数小于或等于1则停止递归,并在末尾加上'\0'
*ch=numChar[n];
ch++;
*ch='\0';
}
}
int main()
{
int a;
cin>>a;
int length=getNumLength(a);
// 预先开辟length+1个字节空间,比如123要开辟4个字节,最后一个字节是'\0';
char *result=new char[length+1];
tran(a,result);
cout< system("pause");
return 0;
}

回答2:

以下是用递归,正向输出每个数字的方法
void tran(int num);
int main()
{
    int a;
    cin>>a;
    tran(a);
    return 0;
}

void tran(int num)
{
     if ( num > 10 )
        tran( num/10 );
     cout << num%10;
}
如果你想把结果存储到字符串数组中,则上面的代码要改造一下才可以,增加一个字符数组,tran()函数也要增加相应的参数才可以达到效果

回答3:

就是A函数调用A函数,调用它本身!
你这代码我看不明白是干什么!