不使用算术运算从二进制转换为十进制
Converting from Binary to Decimal without using arithmetic operations
我写了这篇文章,直到我意识到 * 是一个算术运算。
我想return二进制序列输入的非负整数表示。 IE。 0x4a returns 十进制的 74
typedef unsigned bit16;
unsigned int bin_to_dec(bit16 x)
{
int dec=0;
int k=0;
int remainder;
while (x!= 0){
remainder = x%10;
dec+=remainder*k;
k=k+2;
x=x/10;
}
:(
如果我不能使用 +/- 以外的算术运算,我将如何进行此转换?
由于+
也是算术运算,所以变难了。根据确切的规则,使用查找 table 可能是 acceptable: return lookuptable[x];
因为 + 和 - 是允许的...而不是乘以 k*reamainder
尝试以这种方式循环
int n;//consider new int
在 while 循环中将第一行写为
n=remainder;
而不是 *
for(i=0;i<k;i++)
remainder+=n;
这会做乘法:)。
并且对于x%10,构建一个函数
int mod(int n)
{
int m;
while(n>0)
{
n=n-10;
m=n;
}
return m;
}
对于 x/10 它是一样的但是你必须 return 你像这样减去的次数 :
int mod(int n)
{
int count=0;
while(n>0)
{
count=count+1;
n=n-10;
}
return count;
}
编辑:如果 + 和 - 也不允许尝试使用二元运算符为它们创建函数,并在上面的答案中使用它们代替 + 和 -!
我写了这篇文章,直到我意识到 * 是一个算术运算。
我想return二进制序列输入的非负整数表示。 IE。 0x4a returns 十进制的 74
typedef unsigned bit16;
unsigned int bin_to_dec(bit16 x)
{
int dec=0;
int k=0;
int remainder;
while (x!= 0){
remainder = x%10;
dec+=remainder*k;
k=k+2;
x=x/10;
}
:(
如果我不能使用 +/- 以外的算术运算,我将如何进行此转换?
由于+
也是算术运算,所以变难了。根据确切的规则,使用查找 table 可能是 acceptable: return lookuptable[x];
因为 + 和 - 是允许的...而不是乘以 k*reamainder
尝试以这种方式循环
int n;//consider new int
在 while 循环中将第一行写为
n=remainder;
而不是 *
for(i=0;i<k;i++)
remainder+=n;
这会做乘法:)。
并且对于x%10,构建一个函数
int mod(int n)
{
int m;
while(n>0)
{
n=n-10;
m=n;
}
return m;
}
对于 x/10 它是一样的但是你必须 return 你像这样减去的次数 :
int mod(int n)
{
int count=0;
while(n>0)
{
count=count+1;
n=n-10;
}
return count;
}
编辑:如果 + 和 - 也不允许尝试使用二元运算符为它们创建函数,并在上面的答案中使用它们代替 + 和 -!