sunnyrubik 发表于 2018-12-2 17:08:10

二进制转十进制失败,请大家帮帮忙

这是题目的要求,但在最后一步二进制转10进制那里老是是0,请大家帮忙看看


然后这是我写的
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void bit(long long int num,int tnum[]);
void reversed(int tnum[],int tnum1[]);
int zhuan(long long int num1,int tnum1[]);

int main()
{
        long long int num;//num<=65535,因为只有16位
        int tnum = {0};//换前的2进制
        int tnum1 = {0};//换后的2进制
        long long int num1=zhuan(num1,tnum1);
       
        printf("Enter an unsigned int:");
        scanf("%d",&num);
       
        printf("Before bits are reversed:\n");
        printf("%7lld = ",num);
        bit(num,tnum);
        printf("\n");
       
        printf("After bits are reversed:\n");
        printf("%7lld = ",num1);
        reversed(tnum,tnum1);
       

        system("pause");
        return 0;
}

void bit(long long int num,int tnum[])//将10进制转换为2进制
{
        int i=16;
        for(i;i>=1;i--)
        {
                if(num <= pow(2,i) && num >= pow(2,i-1))
                {
                   tnum = 1;
                   num = num-pow(2,i-1);
          }
        }
        for(i=0;i<8;i++)
        {
                printf("%d",tnum);
        }
        printf(" ");
        for(i=7;i<16;i++)
        {
                printf("%d",tnum);
        }
}

void reversed(int tnum[],int tnum1[])//翻转
{
        int i;
        for(i=0;i<8;i++)
        {
                tnum1=tnum;
        }
       
        for(i=0;i<8;i++)
        {
                printf("%d",tnum1);
        }
        printf(" ");
        for(i=7;i<16;i++)
        {
                printf("%d",tnum1);
        }
}

int zhuan(long long int num1,int tnum1[])//将2进制转换为10进制
{
        int i;
        num1=0;
        for(i=0;i<16;i++)
        {
                if(tnum1==1)
                {
                        num1=num1+pow(2,15-i);
                }
        }
        return num1;
}

gary冥霧 发表于 2018-12-2 17:08:11

本帖最后由 gary冥霧 于 2018-12-3 08:38 编辑

我找到問題點了,我先告訴你,為何,不行再看正確程式碼。{:5_105:}

你在14行時就已經把num1的質給定下了,這時tnum1裡面都是0所以你的num1也只能等於0{:9_222:} ,所以後面num1的質就是0。{:10_333:}

所以你應該要進行兩次reversed(tnum,tnum1); ,第一次在printf("After bits are reversed:\n");上面,同時要再加上num1=zhuan(num1,tnum1);,{:9_228:}
還有在一開始宣告時宣告long long int num1=0;這樣就好不用宣告成long long int num1=zhuan(num1,tnum1);因這樣就只是把num1設成0而已,{:10_261:}
                                 如果還有不會的就提問我會盡量回答
                                                         正確程式碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void bit(long long int num,int tnum[]);
void reversed(int tnum[],int tnum1[]);
int zhuan(long long int num1,int tnum1[]);

int main()
{
      long long int num;//num<=65535,因?只有16位
      int tnum = {0};//?前的2?制
      int tnum1 = {0};//?后的2?制
      long long int num1=0;//zhuan(num1,tnum1);//<----------------
          //                                                      |
      printf("Enter an unsigned int:");//                         |
      scanf("%d",&num);//                                       |
                     //                                           |
      printf("Before bits are reversed:\n");//                  |
      printf("%7lld = ",num);//                                 |
      bit(num,tnum);//                                          |
      printf("\n"); //                                          |
      //                                                          |
      reversed(tnum,tnum1);//<-----------------------------------------這裡需
      num1=zhuan(num1,tnum1);//<---------------------------------------要修改
      printf("After bits are reversed:\n");
      printf("%7lld = ",num1);
      reversed(tnum,tnum1);
      system("pause");
      return 0;
}

void bit(long long int num,int tnum[])//?10?制???2?制
{
      int i=16;
      for(i;i>=1;i--)
      {
            if(num <= pow(2,i) && num >= pow(2,i-1))
            {
                    tnum = 1;
                num = num-pow(2,i-1);
            }
      }
      for(i=0;i<8;i++)
      {
            printf("%d",tnum);
      }
      printf(" ");
      for(i=7;i<16;i++)
      {
              printf("%d",tnum);
      }
}

void reversed(int tnum[],int tnum1[])//翻?
{
      int i;
      for(i=0;i<8;i++)
      {
                tnum1=tnum;
      }
      
      for(i=0;i<8;i++)
      {
                printf("%d",tnum1);
      }
      printf(" ");
      for(i=7;i<16;i++)
      {
                printf("%d",tnum1);
      }
}

int zhuan(long long int num1,int tnum1[])//?2?制???10?制
{
      int i;
      num1=0;
      for(i=0;i<16;i++)
      {
                if(tnum1==1)
                {
                  num1=num1+pow(2,15-i);
                }
      }
      return num1;
}
繼續學習把魚油們!!!!!!!!!!{:9_231:}
不知是否解決你的問題還請你找出最佳解答!!!!!!!!!!!!!!!!!{:9_228:} {:9_221:}

sunnyrubik 发表于 2018-12-3 23:08:09

本帖最后由 sunnyrubik 于 2018-12-3 23:11 编辑

gary冥霧 发表于 2018-12-3 08:24
我找到問題點了,我先告訴你,為何,不行再看正確程式碼。

你在14行時就已經把num1的質給定下 ...

万分感谢您解决了我的问题。{:5_110:}

gary冥霧 发表于 2018-12-11 08:37:46

sunnyrubik 发表于 2018-12-3 23:08
万分感谢您解决了我的问题。

不客氣,學習總會又問題,改進柴是最好的
页: [1]
查看完整版本: 二进制转十进制失败,请大家帮帮忙