【发布时间】:2020-08-29 16:59:21
【问题描述】:
大家!现在我被困在这里有一个问题......
问题:
给定一个表示为数组的二进制数,编写一个函数 将数组及其大小作为参数,并返回整数 价值。您可以假设至少有 1 个且不超过 30 个 数组中的数字,并且所有值都是 0 或 1。 数组在开始时以最高有效二进制数字排序 (索引 0)和末尾的最低有效位。
Signature: int binary_to_number(int binary_digits[], int number_of_digits)
我写的函数在底部。 返回 number_of_digits 的 int 值可以正常工作。
如您所见,问题是“您可以假设数组中至少有 1 个且不超过 30 个数字”
我的问题是,即使有超过 10 个数字(可能是 30 个数字),我如何修复我的函数以返回正确的 int 值?
或者,我应该以不同的方式解决问题吗?如果是这样,我该怎么办?
#include<iostream>
#include<string>
int binary_to_number(int binary_digits[], int number_of_digits){
std::string bin_str;
for (int i=0; i<number_of_digits; i++) {
if (binary_digits[i] == 0) {
bin_str = "0" + bin_str;
} else if (binary_digits[i] == 1) {
bin_str = "1" + bin_str;
}
}
int bin_int = std::stoi (bin_str);
return bin_int;
}
【问题讨论】:
-
"返回 number_of_digits
-
你的函数很奇怪。它接受
[1001]之类的数组,然后将其转换为字符串"1001",并将其转换为int,即1001。答案似乎应该是9。 -
可能是
return static_cast<int>(std::bitset<30>(bin_str).to_ulong());?当然,这假设bin_str是正确创建的。 -
您对分配有两种误解。首先它说最高位首先出现,但你把它放在最后,然后你应该转换为十进制。您的函数返回
1输入{1,0}但它应该是2 -
问题是,一旦你按照作业的要求去做,数字位数的问题可能就会消失。现在你受到
int的数字限制,但你真的不需要达到这个限制
标签: c++ arrays string binary decimal