青少年编程知识记录 codecoming

【题解】转换的问题

【题目描述】

那么,问题来了:

输入一个十进制数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;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:题解目录 浏览: