关于十六进制转十进制的C++程序

来源:百度知道 编辑:UC知道 时间:2024/07/02 04:08:44
十六进制转十进制不是乘权相加吗?我就想用乘权相加的方法转换
2a=2×16^1+a×16^0=32;
我就想用这种方法求出来
#include<iostream>
using namespace std;
#include<cmath>
#include<string.h>
void main()
{
char ch[10];
cin>>ch;
double n=strlen(ch);
double sum=0,w;
for(int i=0;ch[i]!='\0';i++)
{for(w=n-1;w>=0;w--)
{sum+=(ch[i]-'0')*pow(16,w);

}}cout<<sum;
}
这是我写的,但是我算不出来,希望各位大大能帮下忙
a,b,c,d,e,f现在先别管,只输入数字。但是我就是算不到正确的结果

十分感谢。我还有个问题想请问下,为什么要把w改成w=n-1-i

ch[i]-'0'确实可以将字符0-9变为数字0-9,但a b c d e f却不能直接这样变,还需做个判断,注意下大小写。

还有从算法上看,这应该就是循环n次,不该有循环嵌套,外层循环可以就那样,内层循环那个for就不要了。

16的次方那个w的值也有点问题,w=n-1-i

不考虑a,b,c,d,e,f的话,可参考下面
void main()
{
char ch[10];
cin>>ch;
double n=strlen(ch);
double sum=0,w;
for(int i=0;ch[i]!='\0';i++)
{
w=n-1-i;
{
sum+=(ch[i]-'0')*pow(16,w);
}
}
cout<<sum;
}

#include<iostream>
using namespace std;
#include<cmath>
#include<string.h>
void main()
{
char ch[10];
cin>>ch;
double n=strlen(ch);
int sum=0,w;
for(int i=0;ch[i]!='\0';i++)
{
w=n-1-i;
sum+=(ch[i]-'0')*pow(16,w);
}
cout<<sum;

}
汗·
最高位是n-1啊,数组第一个是最高位,所以是n-1-0,接下来的都一样·反正没分,呵呵·