C++程序设计一(进制转换)

  • Post author:
  • Post category:其他




任务 1

编写一个 C++ 程序,将二进制数转换为十进制数 并将十进制数转换为二进制数。 该程序会提示用户输入一个数字。 您必须将数字作为字符串读取。 如果数字是二进制数,则将其转换为十进制数。 如果数字是十进制,则将其转换为二进制。 如果数字无效,则必须显示相应的错误消息。使用下面的示例来

(a) 查看需要什么以及

(b) 查看可能发生的输出类型




Notes:

1.十进制数必须在 0 到 255 之间(你必须检查这个)

2.二进制数不能超过 9 个二进制数字(你必须检查这个)

3.一个二进制数必须始终输入 前导零(您输入的第一个数字必须是 0)

4. 十进制数不能带前导零(检查这个)

5. 十进制数不能用前导零显示

6. 二进制数必须始终显示为 8 位 4 位后有一个空格(参见示例)

7. 输入二进制数时不会使用空格——您不必检查这一点

8. 有几种不同的错误消息——参见示例 4 到 7

9.不要使用空格 将二进制转换为十进制的库函数——编写你自己的函数

10.不要使用库函数将十进制转换为二进制——编写你自己的函数11.你必须至少包含两(2)个函数(这些可能是上面的 9 和 10)



您的显示必须与下面显示的示例相同。




Example 1:


Enter a number: 8Converting decimal to binary. The result is 00001000


Example 2:


Enter a number: 010Converting binary to decimal. The result is 2


Example 3:


Enter a number: 10Converting decimal to binary. The result is 00001010


Example 4:


Enter a number: helloThis is not a valid number.


Example 5:


Enter a number: 027This is not a valid binary number.


Example 6:


Enter a number: 256Thisdecimal number is outside the range 0 to 255.


Example 7:


Enter a number: 00101001010This binary number has more than 9 binary digits.



Answer:


总是有不止一种可能的解决方案。以下是一种可能的解决方案——它不是唯一的解决方案。

#include <iostream>
#include <cstdlib> // need this for exit
using namespace std;
void binarytodecimal(string s);
void decimaltobinary(string s);
string convert(int num);
int main() {
 string str;
 cout << "Enter a number ";
 cin >> str;
 if (str[0] == '0') {
 binarytodecimal(str);
 } else {
 decimaltobinary(str);
 }
}
void binarytodecimal(string s) {
 int value, len, i;
 value = 0;
 len = s.length();
 if (len > 9) {
 cout << "This binary number has more than 9 binary digits.\n";
 exit(20);
 }
 for (i = 0; i < len; i++) {
 if ((s[i] == '0') || (s[i] == '1')) {
 value = value * 2 + s[i] - 48;
 } else {
 cout << "This is not a valid binary number.\n";
 exit(22);
 }
 }
 cout << "Converting binary to decimal. The result is ";
 cout << value << endl;
}
void decimaltobinary(string s) {
 string binary;
 int value, len, i;
 value = 0;
 len = s.length();
 for (i = 0; i < len; i++) {
 if ((s[i] >= '0') && (s[i] <= '9')) {
 value = value * 10 + s[i] - 48;
 } else {
 cout << "This is not a valid number.\n";
 exit(24);
 }
 }
 if ((value < 0) || (value > 255)) {
 cout << "This decimal number is outside the range 0 to 255.\n";
 exit(26);
 }
 binary = convert(value);
 cout << "Converting decimal to binary. The result is ";
 cout << binary << endl;
}
string convert(int num) {
// convert num to binary and display the result
 int len, i;
 char digit;
 string temp, result, display;
 i = 0;
 temp = "";
 while (num > 0) {
 digit = (num % 2) + 48;
 temp = temp + digit;
 num = num / 2;
 }
 // include extra zeros to get to 8 binary digits
 len = temp.length();
 while (len < 8) {
 temp = temp + "0";
 len = temp.length();
 }
 // reverse temp to get the result
 result = "";
 len = temp.length();
 for (i = len - 1; i >= 0; i--) {
 result = result + temp[i];
 }
 // place a space after first 4 digits
 display = "";
 for (i = 0; i < 4; i++) {
 display = display + result[i];
 }
 display = display + " ";
 for (i = 4; i < 8; i++) {
 display = display + result[i];
 }
 return display;
}
第一个任务只是预热,后面还有第二第三个任务



版权声明:本文为weixin_42455006原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。