R进制数转换为十进制数【进制转换】

  • Post author:
  • Post category:其他

一般而言,对于任意的R进制数,有以下表示:

        An-1An-2…A1A0 . A-1A-2…A-m (其中n为整数位数,m为小数位数)

可以表示为以下和式:

        An-1×Rn-1 +…+A1×R1+A0×R0+A-1×R-1+…A-m×R-m (其中R为基数(进制数))

例如:一个十六进制的数:1F,转换为十进制的过程

                1*16^1+F(15)*16^0=16+15=31;

R进制数转换为十进制数思路:

R进制数转换为十进制数的基本方法是将R进制数的各位按权展开,然后进行十进制数相加即可。

十进制数转R进制数:十进制转R进制数详解 

例:A+B

问题描述

输入两个不超过8位的十六进制整数,求它们的和并转换为十进制数输出。

注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示或小写的英文字母a、b、c、d、e、f表示。

输入

输入包括多组测试用例,每组测试用例占1行,为两个十六进制整数A和B。

输出

对每组测试用例,输出一行。为A+B的十进制数。

输入样例

1 9

A B

a b

输出样例

10

21

21

 AC代码:

#include <iostream>
using namespace std;
int change(char c1[])//十六进制转化为十进制 
{
	int sum=0;//最终的十进制数 
	int n;//临时变量 
	for(int i=0;c1[i]!='\0';i++)  //遍历十六进制数组 
	{
		if(c1[i]>='0'&&c1[i]<='9')  //0-9的转为整型 
		 n=c1[i]-'0';
		else if(c1[i]>='A'&&c1[i]<='Z')	//A~F转为整型的10-15 
		 n=c1[i]-'A'+10;	
		else   //a~f也转为整形的10-15
		n=c1[i]-'a'+10; 
		sum=sum*16+n;
	}
	return sum;
	
 } 
int main(int argc, char** argv) {
	char a[10],b[10];//以字符数组形式存储十六进制 
	while(scanf("%s%s",a,b)!=EOF)
	{
		cout<<(int)change(a)+change(b); //转为十进制后再相加(注意类型转换) 
	}
	return 0;
}

 注:如果是一个任意的进制数R,要转化成十进制数,在十六进制数转十进制数上进行一个数的修改即可:将 sum=sum*16+n;改为 sum=sum*R+n;

R进制数转10十进制的AC代码: 

#include <iostream>
using namespace std;
int change(char c1[],int r)//R进制转化为十进制 
{
	int sum=0;//最终的十进制数 
	int n;//临时变量 
	for(int i=0;c1[i]!='\0';i++)  //遍历R进制数组 
	{
		if(c1[i]>='0'&&c1[i]<='9')  //0-9的转为整型 
		 n=c1[i]-'0';
		else if(c1[i]>='A'&&c1[i]<='Z')	//A~F转为整型的10-15 
		 n=c1[i]-'A'+10;	
		else   //a~f也转为整形的10-15
		n=c1[i]-'a'+10; 
		sum=sum*r+n;
	}
	return sum;
	
 } 
int main(int argc, char** argv) {
	int r; //输入的进制数
	cin>>r;
	char a[10];//以字符数组形式存储R进制 
	cin>>a;
	cout<<change(a,r); 

	return 0;
}

 如果喜欢的化,点个赞再走吧。


版权声明:本文为m0_62808395原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。