题目:
资源限制 时间限制: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%