C++ 在C+中从二进制数到十进制数的转换+;
我尝试构建一个函数,将存储在字符串中的二进制数计算为存储在C++ 在C+中从二进制数到十进制数的转换+;,c++,binary,decimal,calculation,C++,Binary,Decimal,Calculation,我尝试构建一个函数,将存储在字符串中的二进制数计算为存储在long中的十进制数。我认为我的代码应该可以工作,但事实并非如此 在本例中,二进制数101110111的十进制数为375。但我的输出完全令人困惑 这是我的密码: #include <string> #include <stdio.h> #include <math.h> #include <iostream> #include <string.h> int main() {
long
中的十进制数。我认为我的代码应该可以工作,但事实并非如此
在本例中,二进制数101110111
的十进制数为375
。但我的输出完全令人困惑
这是我的密码:
#include <string>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string.h>
int main() {
std::string stringNumber = "101110111";
const char *array = stringNumber.c_str();
int subtrahend = 1;
int potency = 0;
long long result = 0;
for(int i = 0; i < strlen(array); i++) {
result += pow(array[strlen(array) - subtrahend] * 2, potency);
subtrahend++;
potency++;
std::cout << result << std::endl;
}
}
我做错了什么?你忘了把数字转换成整数。另外,您真的不需要使用C字符串 这里有一个更好的代码版本
int main() {
std::string stringNumber = "101110111";
int subtrahend = 1;
int potency = 0;
long long result = 0;
for(int i = 0; i < stringNumber.size(); i++) {
result += pow(2*(stringNumber[stringNumber.size() - subtrahend] - '0'), potency);
subtrahend++;
potency++;
std::cout << result << std::endl;
}
}
intmain(){
std::string stringNumber=“101110111”;
int subtrahand=1;
int效价=0;
长结果=0;
对于(int i=0;i std::cout您忘记了将数字转换为整数。另外,您真的不需要使用C字符串
这里有一个更好的代码版本
int main() {
std::string stringNumber = "101110111";
int subtrahend = 1;
int potency = 0;
long long result = 0;
for(int i = 0; i < stringNumber.size(); i++) {
result += pow(2*(stringNumber[stringNumber.size() - subtrahend] - '0'), potency);
subtrahend++;
potency++;
std::cout << result << std::endl;
}
}
intmain(){
std::string stringNumber=“101110111”;
int subtrahand=1;
int效价=0;
长结果=0;
对于(int i=0;i std::cout'1'!=1
,如@churill评论中所述。'1'==49
。如果您在linux上,请在终端中键入man ascii
,以获取ascii表
试试这个,它是相同的代码。我只是直接使用了stringNumber
,而不是对它使用const char*
。我从当前索引中减去'0'
。'0'==48
,所以如果减去它,就得到实际的1
或0
整数值:
auto sz = stringNumber.size();
for(int i = 0; i < sz; i++) {
result += pow((stringNumber[sz - subtrahend] - '0') * 2, potency);
subtrahend++;
potency++;
std::cout << result << std::endl;
}
'1'!=1
,如@churill评论中所述。'1'==49
。如果您在linux上,请在终端中键入man ascii
,以获取ascii表
试试这个,它是相同的代码。我只是直接使用了stringNumber
,而不是对它使用const char*
。我从当前索引中减去'0'
。'0'==48
,所以如果减去它,就得到实际的1
或0
整数值:
auto sz = stringNumber.size();
for(int i = 0; i < sz; i++) {
result += pow((stringNumber[sz - subtrahend] - '0') * 2, potency);
subtrahend++;
potency++;
std::cout << result << std::endl;
}
c++方式
#include <string>
#include <math.h>
#include <iostream>
using namespace std;
int main() {
std::string stringNumber = "101110111";
long long result = 0;
uint string_length = stringNumber.length();
for(int i = 0; i <string_length; i++) {
if(stringNumber[i]=='1')
{
long pose_value = pow(2, string_length-1-i);
result += pose_value;
}
}
std::cout << result << std::endl;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
std::string stringNumber=“101110111”;
长结果=0;
uint string_length=stringNumber.length();
对于(inti=0;ic++方式
#include <string>
#include <math.h>
#include <iostream>
using namespace std;
int main() {
std::string stringNumber = "101110111";
long long result = 0;
uint string_length = stringNumber.length();
for(int i = 0; i <string_length; i++) {
if(stringNumber[i]=='1')
{
long pose_value = pow(2, string_length-1-i);
result += pose_value;
}
}
std::cout << result << std::endl;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
std::string stringNumber=“101110111”;
长结果=0;
uint string_length=stringNumber.length();
对于(int i=0;i可能不相关):您可以使用与const char*
完全相同的std::string,因为它重载了下标运算符[]
。它甚至更好,因为它有长度()
-您可以使用它来代替strlen
。您可以完全删除数组。还有一点提示:'1'!=1
但是'1'==49
请参见可能不相关的内容:您可以像常量字符*
一样使用std::string
,因为它重载了下标运算符[]
。它甚至更好,因为它有一个length()
-函数,您可以使用它来代替strlen
。您可以完全删除数组。还有一点提示:'1'!=1
但是'1'==49
请参阅