问题描述:
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
大水题。。。还以为一次就可以过的,然后就。。。没然后了,,关键的坑就是取值范围,蓝桥的题给的范围测试时一定会取到顶,而这次给的数据必须用long long,输出不记得格式就直接cout了,用数组提前将幂运算结果放好,既方便又省时间,,嗯~这样就妥妥的了。
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
long long cos[8]={1,16,256,4096,65536,1048576,16777216,268435456};
char a[8];
int main()
{
memset(a,'\0',sizeof(a));
scanf("%s",a);
int l=strlen(a);
long long sum=0;
l--;
for(int i=l;i>=0;i--)
{
switch(a[i])
{
case '0':sum+=0*cos[l-i];break;
case '1':sum+=1*cos[l-i];break;
case '2':sum+=2*cos[l-i];break;
case '3':sum+=3*cos[l-i];break;
case '4':sum+=4*cos[l-i];break;
case '5':sum+=5*cos[l-i];break;
case '6':sum+=6*cos[l-i];break;
case '7':sum+=7*cos[l-i];break;
case '8':sum+=8*cos[l-i];break;
case '9':sum+=9*cos[l-i];break;
case 'A':sum+=10*cos[l-i];break;
case 'B':sum+=11*cos[l-i];break;
case 'C':sum+=12*cos[l-i];break;
case 'D':sum+=13*cos[l-i];break;
case 'E':sum+=14*cos[l-i];break;
case 'F':sum+=15*cos[l-i];break;
}
}
cout<<sum<<endl;
return 0;
}