我正在试着开发一个关于转换的程序。这个程序应该转换成十进制的二进制,八进制和十六进制数字。这个程序包含一些错误,因为十进制数是错误的。有人能帮帮我吗?代码如下:
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int Decimal,Lenght,Pos_bit,x,base,i,n;
//Pos_bit=Exponent
char c[9];
int main()
{
Decimale=0;
Pos_bit=0;
n=0;
cout<<"Select a conversion method"<<endl;
cout << endl << endl;
cout << "1)Binary-Decimal" << endl;
cout << "2)Octal-Decimal" << endl;
cout << "3)Hexa-Decimal" << endl;
cin >> x;
switch (x)
{
case (1):
base=2;
break;
case (2):
base=8;
break;
case (3):
base=16;
}
cout<<"How many digits has the number?"<<endl;
cin>>Lenght;
Pos_bit=Lenght;
for(i=0;i<Lenght;i++,Pos_bit--)
{
cout<<"Type-bit value"<<endl;
cin>>c;
if(base==2){
if(c[i]==48){
n=0;}
else if(c[i]==49){
n=1;}
Decimal=Decimal+n*(pow(2,Pos_bit));
}
else if(base==8){
if ((c[i]>=48)&&(c[i]<=55)){
n=c[i]-48;}
Decimal=Decimal+n*(pow(8,Pos_bit));
}
else if(base==16){
if((c[i]>=48 && c[i]<=57)){
n=c[i]-48;}
else if((c[i]>=65)&&(c[i]<=70)){
n=c[i]-55;}
else if((c[i]>=97)&&(c[i]<=102)){
n=c[i]-87;}
Decimal=Decimal+n*pow(16,Pos_bit);
}
}
cout<<"Decimal number is"<<Decimal<<endl;
getch();
system("cls");
return 0;
}谢谢你的帮忙!
发布于 2017-03-08 00:52:57
最大的问题是您处理Pos_bit的方式。你有一个错误的off。
假设我想从二进制转换成11。Lungh_num和Pos_bit从2开始。你的第一位数是
Decimale=Decimale + 1 * (pow(2, 2));答案是4。你的最终答案是6。在循环之前,设置
Pos_bit = Lungh_num - 1;实际上,最好的办法就是完全忘记pow()的东西。而不是
Decimale=Decimale+n*pow(16,Pos_bit);写
Decimale = Decimale * base + n;发布于 2017-03-08 01:05:31
如果我们不关心输入过滤、幻数和其他编码标准问题,那么您的主要错误是:
我们计算从0到n-1的比特数,所以这一行应该是:Pos_bit = Lungh_num - 1;
c[0]的地方,你应该把它替换成c[0]。如果我没记错的话,您只关心输入的第一个字符。更正后的代码应如下所示:
#include <conio.h>
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
int Decimale, Lungh_num, Pos_bit, x, base, i, n;
//lungh_num=n lenght;
//Pos_bit=Exponent
char c[9];
int main()
{
Decimale = 0;
Pos_bit = 0;
n = 0;
cout << "Scegli un metodo di conversione" << endl;
cout << endl << endl;
cout << "1)Binario-Decimale" << endl;
cout << "2)Ottale-Decimale" << endl;
cout << "3)Esadecimale-Decimale" << endl;
cin >> x;
switch (x)
{
case (1):
base = 2;
break;
case (2):
base = 8;
break;
case (3):
base = 16;
}
cout << "Quante cifre ha il numero?" << endl;
cin >> Lungh_num;
Pos_bit = Lungh_num - 1;
for (i = 0; i < Lungh_num; i++, Pos_bit--)
{
cout << "Digita valore bit" << endl;
cin >> c;
if (base == 2) {
if (c[0] == 48) {
n = 0;
}
else if (c[0] == 49) {
n = 1;
}
Decimale = Decimale + n*(pow(2, Pos_bit));
}
else if (base == 8) {
if ((c[0] >= 48) && (c[0] <= 55)) {
n = c[0] - 48;
}
Decimale = Decimale + n*(pow(8, Pos_bit));
}
else if (base == 16) {
if ((c[0] >= 48 && c[0] <= 57)) {
n = c[0] - 48;
}
else if ((c[0] >= 65) && (c[0] <= 70)) {
n = c[0] - 55;
}
else if ((c[0] >= 97) && (c[0] <= 102)) {
n = c[0] - 87;
}
Decimale = Decimale + n*pow(16, Pos_bit);
}
}
cout << "Il numero decimale e'" << Decimale << endl;
getch();
system("cls");
return 0;
}https://stackoverflow.com/questions/42653173
复制相似问题