该函数将找到二进制数的位数,即8。然后它将运行多次循环..然后,如果该二进制数的第k位为1,那么它将添加2 ^ k如果二进制数的第k个数字为0,则为ans变量...我只是跳过它......
所以1 = 128 1 = 64 0 = 0 1 = 16 0 = 0 1 = 4 0 = 0 1 = 1 ------ 213 ------
这就是逻辑......但是当我运行它时......我一直得到答案 0 ...你们可以帮帮我吗?
所以这是代码..
int toDecimal(int number,int base){
if (base==2) {
int i, n=number, dec=0, d1, d=0;
while(n!=0){
n=n/10;
++d;
}
d1=d;
for(i=0;i<d;i++){
if(n%10==1){
dec+=pow(2,--d1);
n=n/10;
}
else{
--d1;
n=n/10;
}
}
return dec;
}
return 0;
}
答案 0 :(得分:2)
for(i = 0; number != 0; i++){
if(number % 10 == 1){
dec += 1<<i;
}
number /= 10;
}
这应解决评论中讨论的所有问题。
答案 1 :(得分:1)
您在第一个while循环中使用以下语句永久修改n:n=n/10;
您需要在使用n=number;
的循环之间将n设置为数字
答案 2 :(得分:1)
这是一个有用的提示:
请注意,它们具有相同的表示形式,但它们是相反的。
话虽如此,因为你计算解决方案中的小数位和其他所有内容,它变得相当复杂。它不需要那么复杂。
#include <stdio.h>
#include <assert.h>
int toDecimal(int number, int base) {
assert(base == 2);
int result = 0;
int offset = 1;
while (number) {
if (number % 10 == 1)
result += offset;
offset *= 2;
number /= 10;
}
return result;
}
int main() {
printf("%d\n", toDecimal(11010101, 2));
}
答案 3 :(得分:0)
不使用两个循环,而只使用一个循环,如下面给出的
你甚至可以删除if语句。
int toDecimal(int number,int base){
if (base==2) {
int n=number, dec=0, d=0, r;
while(n!=0){
r=n%10;
dec+=r*1<<d++;
n=n/10;
}
return dec;
}
return 0;
}