题目
代码
#include<iostream>
#include<cmath>
using namespace std;
int bin2dec(string bin) {
int len = bin.length();
int ans = 0;
for (int i = 0; i < len; i++) {
ans = ans + ((int)(bin[i]) - 48) * pow(2, len - i - 1);
}
return ans;
}
int str2dec(string s) {
int len = s.length();
int ans = 0;
for (int i = 0; i < len; i++) {
ans = ans + ((int)(s[i]) - 48) * pow(10, len - i - 1);
}
return ans;
}
string dec2bin(int d) {
int a[8] = { 0 };
int ou = d; //商
int rest; //余数
int i = 7;
while (ou != 0) {
rest = ou % 2;
ou = ou / 2;
a[i] = rest;
i--;
}
char b[9];
for (int i = 0; i < 9; i++) {
b[i] = '0';
}
for (int i = 0; i < 4; i++) {
b[i] = (char)(a[i] + 48);
}
b[4] = ' ';
for (int i = 5; i < 9; i++) {
b[i] = (char)(a[i-1] + 48);
}
string b1(b);
return b1;
}
int main()
{
string numberstr;
cout << "Enter a number:";
cin >> numberstr;
for (int i = 0; i < numberstr.length(); i++) {
if ((int)(numberstr[i]) < 48 || (int)(numberstr[i]) > 57) {
cout << "This is not a valid number.";
return 0;
}
}
if (numberstr[0] == '0') {
for (int i = 1; i < numberstr.length(); i++) {
if ((int)(numberstr[i]) > 49) {
cout << "This is not a valid binary number.";
return 0;
}
}
if (numberstr.length() > 8) {
cout << "This binary number has more than 9 binary digits.";
return 0;
}
cout<<"Converting binary to decimal. The result is "<<bin2dec(numberstr);
return 0;
}
if (str2dec(numberstr) > 255) {
cout << "This decimal number is outside the range 0 to 255";
return 0;
}
int out = str2dec(numberstr);
string b = dec2bin(out);
cout << "Converting decimal to binary. The result is ";
for (int i = 0; i < 9; i++) {
cout << b[i];
}
return 0;
}
这是一道经典的题目。大家可以借鉴我的代码,其中的部分代码还可以继续优化。