扭转结果

时间:2014-01-20 17:38:08

标签: c

我是C的新手,我正在尝试将十进制转换为二进制。 结果是给出了所需要的倒数。 我尝试在结果上应用模数,就像我在其他论坛上看到的那样,但我仍然得到相同的结果。 有什么帮助吗?

#include<stdio.h>

int main()
{
int number;
long int quotient, rem;
printf("Enter a number: ");
scanf("%d", &number);

quotient=number;

while (quotient!=0)
{
    quotient=quotient/2;
    rem=quotient%2;
    printf("%ld", rem%10);
    rem/=10;
}
}

我根据打印功能提出了建议,但仍然不确定我是否理解它仍然给我相同的结果。请看看。

#include<stdio.h>

void Print(int number,int base)
{
if (number >= base)
    Print(number/base,base);
printf("%d",number%base);
}

int main()
{
int number;
long int quotient, rem;
printf("Enter a number: ");
scanf("%d", &number);

quotient=number;

while (quotient!=0)
{
    quotient=quotient/2;
    rem = quotient%2;
    Print(rem, 2);
    }
}

只是一个小小的音符,因为我忘了说,我不想让你经历麻烦。 想法不使用数组。 感谢

6 个答案:

答案 0 :(得分:3)

你可以采用“后进先出”的方式:

void Print(int number,int base)
{
    if (number >= base)
        Print(number/base,base);
    printf("%d",number%base);
}

然后,从main开始,您可以使用2到10之间的任何基数来调用它。

答案 1 :(得分:0)

你应该以各种方式解决问题。

过程1:只做右移,检查移位结果并打印已确定的输出。

int main()
{
  int n, c, k;

  printf("Enter an integer in decimal number system\n");
  scanf("%d", &n);

  printf("%d in binary number system is:\n", n);

  for (c = 31; c >= 0; c--)
  {
    k = n >> c;

    if (k & 1)
      printf("1");
    else
      printf("0");
  }

  printf("\n");

  return 0;
}

答案 2 :(得分:0)

试试这段代码。

int number;
printf("Enter a number: ");
scanf("%d", &number);
printf("%d",decimal_binary(number));


int decimal_binary(int n)  /* Function to convert decimal to binary.*/
{
int rem, i=1, binary=0;
while (n!=0)
{
    rem=n%2;
    n/=2;
    binary+=rem*i;
    i*=10;
}
return binary;
}

答案 3 :(得分:0)

  

我正在尝试将十进制转换为二进制

您扫描输入的点之后没有小数点。你有一个号码。数字不是十进制或二进制,它们只是数字。 scanf已将某个数字的十进制表示转换为您的数字。

一旦有了数字,你就想获得它的二进制代表。再一次,你手边没有小数点。

现在问问自己,你在互联网的某个黑暗角落发现的10分是否可能是正确的。

(这个答案是故意未完成的)

答案 4 :(得分:0)

long int decimalNumber,remainder,quotient;

int binaryNumber[100],i=1,j;


printf("Enter any decimal number: ");

scanf("%ld",&decimalNumber);


quotient = decimalNumber;


while(quotient!=0){

     binaryNumber[i++]= quotient % 2;

     quotient = quotient / 2;

}


printf("Equivalent binary value of decimal number %d: ",decimalNumber);

for(j = i -1 ;j> 0;j--)

     printf("%d",binaryNumber[j]);

答案 5 :(得分:0)

在这里,您可以使用自己的代码来纠正误导,并正确显示二进制数。

#include<stdio.h>

int main()
{
    long int decimal, quotient;
    int binarynumber[1024];
    const int base = 2;

    printf("Enter a number: ");
    scanf("%ld", &decimal);
    printf("%d in binary: ", decimal);

    quotient = decimal;

    int i=1;
    while (quotient!=0)
    {
        binarynumber[i++]=quotient%base;
        quotient/=base;
    }
    for(int j=i; j>0; --j){
        printf("%d",binarynumber[j]);
    }
    printf("\n");
    return 0;
}

拥有十进制数字变量是正确的,我称之为decimal以避免混淆。但是,您可以将{十进制数的输入存储在quotient内,它的工作方式也相同。

我添加了基数变量base,在我看来应该是常量,而不是模数运算符加基数,代码中的%2

你应该有一个变量,你在这段代码中有rembinarynumber - 将它全部存储起来然后反转这个变量中的数字,就像代码中提供的for循环一样。我最好将它存储在一个数组中,而不是与另一个名为rem的变量混淆。

我并不知道你想对rem/=10;做些什么,所以我解决了这个问题。

对于商使用long int是正确的,但是,在许多情况下,long intint相同。

  

在许多(但不是全部)C和C ++实现中,long大于   一个int。大多数编译器使用32位int,它具有相同的大小和表示   很长一段时间。 Reference

还有一件事,在检索模数答案之前,您曾经用基数除以存储到商(在代码quotient=quotient/2;中),导致模数不正确,不正确的余数(在您的代码中) rem=quotient%2;)。它检索了下一个号码的提醒。

希望这很清楚。