蓝桥杯练习 十六进制转换为十进制 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次方