题目:
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
代码1:
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
char s[9];
scanf("%s",s);
int len =0,c = 1,p;
long long sum=0;
while(s[len]!='\0')
len++;
for(int i=len-1;i>=0;i--){
if(s[i]>='A'&&s[i]<='F')
p = s[i]-'A'+10;
else
p = s[i]-'0';
sum = sum+p*c;
c = c*16;
}
cout<<sum;
return 0;
}
注意:这里只过了75%的案例
代码2:这个可以100%
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
long long s;
scanf("%llx", &s);
//scanf_s("%llx", &s);
printf("%lld", s);
return 0;
}
代码3:这里使用string类
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
int change(char x)
{
if(x>='0'&&x<='9') return x-'0';
else if(x>='A'&&x<='F') return x-'A'+10;
}
int main()
{
string s;
cin>>s;
int len = s.length(),ss=1;
long long sum=0;
for(int i=len-1;i>=0;i--){
sum = sum+change(s[i])*ss;
ss *=16;
}
cout<<sum;
return 0;
}
注意:这里也只过了75%