学校OJ题解 12.20 整数转字符串(递归)

就扯扯今天的F题吧,其他的感觉都不是很麻烦,正常些就完了,这题自我感觉比较麻烦,如果大神们有什么好的解法请教我!

问题 F: 整数转字符串(递归)
题目描述
写递归函数void itostr(int num,char str[]),函数功能是将一个整数num转换为字符串str,如整数135,转换为字符串“135”。主函数如下,不可修改。
主函数代码:

int main()
{
	const int SIZE=20;
	int t,num;
	char str[SIZE];
	cin>>t;
	while(t--)
	{
		cin>>num;
		itostr(num,str);
		cout<<str<<endl;
	}
	return 0;
}

itostr每次独立调用。不可以为实现itostr的递归定义全局变量。
输入
测试次数t
t个整数
输出
每个整数,输出转换后的数字字符串
样例输入
5
135
0
78934012
-1110
1323
样例输出
135
0
78934012
-1110
1323

这题的限制条件感觉让这道题麻烦了不少呢…
好啦废话不多说,AC代码如下仅供参考
使用知识: 字符串处理,数论

#include<iostream>
#include<stdio.h>
#include<string.h>
#include <cmath>
using namespace std;
void itostr(int num,char str[])
{
    if(num==0) //特判0的情况
    {
        str[0]='0',str[1]='\0';
        return ;
    }
	if(num<0) //如果是负数的话
    {
        str[0]='-'; //让第一位为负号
        str[int(log10(-num))+2]='\0';  //数论知识 一个大小为 n的数,他的数位是 log10(n)
        if(abs(num/10))
            itostr(num/10,str);
        str[int(log10(-num))+1] = abs(num%10)+'0';
    }
    if(num>0)
    {
        str[int(log10(num)+1)]='\0';
        if(num/10)
            itostr(num/10,str);
        str[int(log10(num))]=num%10+'0';
    }
}
int main()
{
	const int SIZE=20;
	int t,num;
	char str[SIZE];
	cin>>t;
	while(t--)
	{
		cin>>num;
		itostr(num,str);
		cout<<str<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43508782/article/details/85145363