【发布时间】:2019-10-25 08:06:02
【问题描述】:
我正在编写一个将十进制数转换为二进制和十六进制的 C++ 程序。 问题是由于某种原因,它每次都将数字“1875954912”连接到两种表示形式。
我已经尝试了很多东西 - 主要是改变程序计算 numArrayLength 的方式和我的 decToBase 函数中的 for 循环,但我还无法弄清楚为什么会发生这种情况。
顺便说一下,这个程序并不完整——它还没有将大于 9 的整数转换为十六进制表示的字母,但这不是我现在主要关心的问题。
这是我的代码:
#include <iostream>
#include <cmath>
using namespace std;
int howManyBitsNeeded(int someNum, int base) {
int numOfDivisions = 0;
while (someNum != 0) {
someNum = floor(someNum / base);
numOfDivisions += 1;
}
return numOfDivisions;
}
int decToBase(int someNum, int base) {
int bitsNeeded = howManyBitsNeeded(someNum,base);
int numArrayLength = bitsNeeded;
int numArray[bitsNeeded];
while (bitsNeeded > 0) {
numArray[bitsNeeded] = (someNum % base);
someNum = floor(someNum / base);
bitsNeeded -= 1;
}
for (int k = (numArrayLength-1); k >= 0; --k) {
cout << numArray[(numArrayLength - k)];
}
}
int main() {
int inpNum;
cout << "Enter your number: ";
cin >> inpNum;
cout << "Binary representation: " << decToBase(inpNum,2) << endl;
cout << "Hexadecimal representation: " << decToBase(inpNum,16);
return 0;
}
这是输出的样子:
Enter your number: 25
Binary representation: 110011875954912
Hexadecimal representation: 191875954912
任何帮助将不胜感激!
【问题讨论】:
-
decToBase返回是什么意思? 是它应该返回一些东西,还是只打印一些东西,或者两者都做? -
数组索引从
0(不是1)开始,到size-1(不是size)结束——其中size是数组中的项目数量。阅读decToBase函数时请记住这一点,特别是第一次执行numArray[bitsNeeded] = (someNum % base);时,以及输出循环。 -
您似乎访问了未分配的数组索引
numArray。检查decToBase中的while循环。 -
首先,当
bitsNeeded是一个变量时,int numArray[bitsNeeded]不是标准 C++。请改用标准容器,例如std::vector<int>。其次,您将数组索引视为基于 1(即元素1到bitsNeeded)。 C++ 中的数组索引是从零开始的 - 有效索引从0开始。访问结束时会产生未定义的行为。