我正在进行一项任务,要求我用C ++编写程序,将用户输入的二进制数转换为十进制数。听起来不太复杂吧?好吧,我们不能使用任何形式的条件语句,我们不能使用字符串,我们不能使用二进制到十进制函数(不记得它在哪个库,但我知道它存在)。基本上,我们不能使用我们在课堂上没有学到的任何东西。
我想我们在课堂上学到的东西会更容易打开:
我认为一个好的起点是模块划分,我只是不知道如何在不使用条件的情况下获得正确的答案。在过去的48小时里,我一直坐在这里耙着我的大脑,但我仍然没有那个时刻。
提前感谢您的帮助!
编辑:为了它的价值,我们被告知假设这些值是无符号的,最大大小为4位。
答案 0 :(得分:2)
作为提示,这就是你如何做两位:
"stackoverflow.com"
示例:
如果二进制== 11,那么
2 *(11/10)+(11%10)== 3
答案 1 :(得分:1)
由于您在下面的评论中说输入限制为4位,因此只需几个扩展表达式即可处理4或5个不同的输入长度。
这里的指导技巧是将str[0] == '1'
这样的布尔表达式隐式地转换为零或一个。然后可以对这些位进行“数学运算”。
由于这显然是家庭作业,我不打算为你完成。如果您需要删除table
数组成员变量,因为尚未在您的类中引入数组,那取决于您。但是如果你使用已经提供的例子就可以做到。
最后一点,StackOverflow不存在为您的个人Mechanical Turk为您完成作业。将来,您需要展示您已经尝试过的内容,并明确表达您所持有的内容以获得帮助。
int DecimalFromBinary(char* str)
{
int result = 0;
int len = (str[0] != '\0') +
((str[0] != '\0') && (str[1] != '\0')) +
((str[0] != '\0') && (str[1] != '\0') && (str[2] != '\0')) +
((str[0] != '\0') && (str[1] != '\0') && (str[2] != '\0') && (str[3] != '\0'));
int table[5] = { 1,8,4,2,1 };
result += (str[0] == '1') * 8;
result += ((len > 1) && (str[1] == '1')) * 4;
result += ((len > 2) && (str[2] == '1')) * 2;
result += ((len > 3) && (str[3] == '1')) * 1;
result /= table[len];
// printf("%d\n", result);
return result;
}
答案 2 :(得分:0)
如果你被允许使用循环,就会这么简单:
#include <iostream>
#include <string>
int main()
{
std::string str("1101");
int result = 0;
for(int i=str.size()-1, pos=0; i>=0; --i, ++pos)
result += str[i] == '0'? 0 : 1 << pos;
std::cout << result << std::endl;
}
但这样做没有循环或递归?谁说你必须准确!
#include <iostream>
#include <string>
#include <cmath>
long long not_very_accurate(long long input)
{
long long power = ceil(log10(input+1));
return std::pow(2, power);
}
int main()
{
long long input = 1011010110;
std::cout << not_very_accurate(input) << std::endl; //almost the same :)
}
最大误差最多为实际结果的2倍。使用的1
越多,效果越好。
答案 3 :(得分:0)
update tablename
set credit_score = credit_score/10
where credit_score >= 1000 and credit_score%10 = 0
嘿伙计们,终于找到了我的问题的答案。它可能不是接收4位二进制数的用户输入的理想方法,但它是我能想到的最简单的过程,它不涉及使用循环或条件,并且它每次都产生正确的答案。谢谢你的帮助!
答案 4 :(得分:0)
我是初学者,这就是我想出来的......
请让我知道此代码是否可以改进
#include <iostream>
#include<math.h>
using namespace std;
int main(){
int psuedo, bin,q, rem;
cout<<"Enter a binary number: ";
cin>> bin;
int num=0;
psuedo = bin;
while(q!=0){
q=psuedo/10; // psuedo helps us to count number of digits used in binary
num++; // num represents number of digits in binary
psuedo=q;
}
int dec=0;
for(int i =0; i<num; i++){
rem = bin%10;
dec = (rem*pow(2,i))+dec; // conversion to decimal number from binary
q = bin/10;
bin = q;
}
cout<<"The decimal number is: "<<dec<<endl;
return 0;
}
示例:
输入 bin = 0101
输出十进制 = 5