问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入FFFF样例输出65535
还别说,这编程真是一天不练就不行。编个进制转化都会WA好几遍,还是怪自己能力不够。
下面就顺便在程序中注释一下当时在哪里出错,不管是思路上还是代码技巧上
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define LL long long//宏定义
using namespace std;
int main()
{
LL ans=0;
string a;//C++中的字符串类型
cin>>a;
int len=a.length();//取字符串的长度
for(int j=len-1; j>=0; j--)
{
if(a[j]>='0'&&a[j]<='9')//不能漏掉0的情况
//在十进制转十六进制中也错过
{
ans+=(a[j]-'0')*pow(16,len-j-1);//求权值,完全可以用16的多少次方,
//而我第一反应是用自定义函数,是麻烦了点
}
else if(a[j]>='A'&&a[j]<='F')
{
ans+=(a[j]-'A'+10)*pow(16,len-j-1);//第一个括号里面是把再大写字母转换为数字的方法
}
}
cout<<ans<<endl;
return 0;
}
其实就是这么简单,嗯,,加油吧。