【题解】转换的问题
【题目描述】
那么,问题来了:
输入一个十进制数N,将它转换成R进制数输出。
【输入描述】
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
【输出描述】
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)
【样例输入】
7 2 23 12 -4 3
【样例输出】
111 1B -11
【题目分析】
比较经典的进制转换
考虑使用递归的方式实现
【参考代码1】——简单递归实现
#include<iostream>  using namespace std;  void calculate(int n,int k)  {      char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};      int temp;      temp=n%k;      n/=k;      if(n!=0)//判断是否到达边界n=0          calculate(n,k);       cout<<num[temp];  }     int main()  {      int x,m;      cin>>x>>m;//输入十进制数x与要转换成的进制m      calculate(x,m);//调用函数进行转换      cout<<endl;      return 0;  }【参考代码2】——使用全局变量保存(没有考虑负数)
#include<iostream>  #include<cstring>    using namespace std;  char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};  char ans[100]; //结果数组   int p=0;  void calculate(int n,int k)  {      int temp;      temp=n%k;      n/=k;      if(n!=0)//判断是否到达边界n=0          calculate(n,k);    	ans[p]=num[temp];   	p++;  }     int main()  {      int x,m;      while(cin>>x>>m)  	{  		calculate(x,m);//调用函数进行转换  		//输出   		int len=strlen(ans);  		for(int i=0;i<len;i++)  		{  			cout<<ans[i];	  		}   		cout<<endl;  		//初始化数据  		p=0;   		memset(ans, 0, sizeof(ans));   	}      cout<<endl;      return 0;  }【参考代码3】——考虑负数问题
#include<iostream>  #include<cstring>    using namespace std;  char num[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};  char ans[100]; //结果数组   int p=0;  void calculate(int n,int k)  {      int temp;      temp=n%k;      n/=k;      if(n!=0)//判断是否到达边界n=0          calculate(n,k);    	ans[p]=num[temp];   	p++;  }     int main()  {      int x,m;      while(cin>>x>>m)  	{	  		int flag=0;   		if(x<0)  		{  			flag=1;  			x=-x;  		}   		calculate(x,m);//调用函数进行转换  		//输出   		int len=strlen(ans);  		if(flag) //判断负数情况   			cout<<"-";  		for(int i=0;i<len;i++)  		{  			cout<<ans[i];	  		}   		cout<<endl;  		//初始化数据  		p=0;   		memset(ans, 0, sizeof(ans));   	}      cout<<endl;      return 0;  }