蓝桥杯练习 十六进制转换为十进制 C++

蓝桥杯练习 十六进制转换为十进制 C++


#include<iostream>
#include<string.h> 
#include<math.h>
using namespace std;
int main()
{
    
    
	int i,j,k,s=-1,m=0;	
	long long sum=0;			//数据会超出int的范围,需要用long long 去接数据,
	char  sl[16]={
    
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	char  a[20];
	cin>>a;
	i=strlen(a);				//获取输入字符串的长度 
	for(j=i-1;j>=0;j--)
	{
    
    
		s++;			 
		for(k=0;k<16;k++)
		{
    
    
			if(sl[k]==a[j])
			{
    
    
				sum+=k*pow(16,s);	//s=-1;s++;第一次的时候是k*1=k, 
			}						//第二次开始k*16的s次方 
		 } 
	}
	cout<<sum;
	return 0;
}

总结

我的想法是比如
‘ABCD’ ==D+C* 16+B* 16* 16+A* 16* 16* 16
个位+十位乘十六的一次方+百位乘十六的二次方+千位乘十六的三次方
定义sum用int范围是不够的 需要用到long long
strlen()获取字符组的长度
注意 j=i-1 和 j>=0
pow(a,b)就是a的b次方

猜你喜欢

转载自blog.csdn.net/weixin_52906737/article/details/113559178