首页 > 学院 > 开发设计 > 正文

数制转换

2019-11-06 06:57:31
字体:
来源:转载
供稿:网友

问题描述:

描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。样例输入15 Aab3 7样例输出210306

解题思路:

本题思路较为简单,将a进制数n先转化为十进制数,然后在转化为b进制数。

解题细节:

注意题目要求,输出的字母符全部大写,同时运用公式:n=(n/d)*d+n%d;将十进制数转为任意进制数。

代码:

#include<bits/stdc++.h>using namespace std;int main(){	int a,b,d[100];	char c[40];	while(cin>>a>>c>>b)	{		int len=strlen(c);		int i,j,k,m,n,sum=0,x;		for(i=len-1;i>=0;i--)		{			x=0;			m=len-i-1;			if(c[i]>='0'&&c[i]<='9')			x=c[i]-'0';			else if(c[i]>='a'&&c[i]<='z')	      x=c[i]-'a'+10;	      else if(c[i]>='A'&&c[i]<='Z')	      x=c[i]-'A'+10;	      sum+=x*pow(a,m);		}		i=0;		do{			d[++i]=sum%b;			sum=sum/b;		}while(sum!=0);		for(j=i;j>=1;j--)		if(d[j]>=10)		cout<<(char)(d[j]-10+'A');//如果大于等于10,将数字转化为大写字母符		else cout<<d[j];			}	return 0;}运行结果:

心得体会:

做题要有耐心,相信自己!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表