鱼C论坛

 找回密码
 立即注册
查看: 2710|回复: 3

[已解决]二进制转十进制失败,请大家帮帮忙

[复制链接]
发表于 2018-12-2 17:08:10 | 显示全部楼层 |阅读模式
6鱼币
这是题目的要求,但在最后一步二进制转10进制那里老是是0,请大家帮忙看看
屏幕截图(62).png

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

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

  7. int main()
  8. {
  9.         long long int num;//num<=65535,因为只有16位
  10.         int tnum[16] = {0};//换前的2进制
  11.         int tnum1[16] = {0};//换后的2进制
  12.         long long int num1=zhuan(num1,tnum1);
  13.        
  14.         printf("Enter an unsigned int:");
  15.         scanf("%d",&num);
  16.        
  17.         printf("Before bits are reversed:\n");
  18.         printf("%7lld = ",num);
  19.         bit(num,tnum);
  20.         printf("\n");
  21.        
  22.         printf("After bits are reversed:\n");
  23.         printf("%7lld = ",num1);
  24.         reversed(tnum,tnum1);
  25.        

  26.         system("pause");
  27.         return 0;
  28. }

  29. void bit(long long int num,int tnum[])//将10进制转换为2进制
  30. {
  31.         int i=16;
  32.         for(i;i>=1;i--)
  33.         {
  34.                 if(num <= pow(2,i) && num >= pow(2,i-1))
  35.                 {
  36.                    tnum[16-i] = 1;
  37.                    num = num-pow(2,i-1);
  38.             }
  39.         }
  40.         for(i=0;i<8;i++)
  41.         {
  42.                 printf("%d",tnum[i]);
  43.         }
  44.         printf(" ");
  45.         for(i=7;i<16;i++)
  46.         {
  47.                 printf("%d",tnum[i]);
  48.         }
  49. }

  50. void reversed(int tnum[],int tnum1[])//翻转
  51. {
  52.         int i;
  53.         for(i=0;i<8;i++)
  54.         {
  55.                 tnum1[i]=tnum[15-i];
  56.         }
  57.        
  58.         for(i=0;i<8;i++)
  59.         {
  60.                 printf("%d",tnum1[i]);
  61.         }
  62.         printf(" ");
  63.         for(i=7;i<16;i++)
  64.         {
  65.                 printf("%d",tnum1[i]);
  66.         }
  67. }

  68. int zhuan(long long int num1,int tnum1[])//将2进制转换为10进制
  69. {
  70.         int i;
  71.         num1=0;
  72.         for(i=0;i<16;i++)
  73.         {
  74.                 if(tnum1[i]==1)
  75.                 {
  76.                         num1=num1+pow(2,15-i);
  77.                 }
  78.         }
  79.         return num1;
  80. }
复制代码

屏幕截图(63).png
最佳答案
2018-12-2 17:08:11
本帖最后由 gary冥霧 于 2018-12-3 08:38 编辑

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

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

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

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

  7. int main()
  8. {
  9.         long long int num;//num<=65535,因?只有16位
  10.         int tnum[16] = {0};//?前的2?制
  11.         int tnum1[16] = {0};//?后的2?制
  12.         long long int num1=0;//zhuan(num1,tnum1);//<----------------
  13.           //                                                        |
  14.         printf("Enter an unsigned int:");//                         |
  15.         scanf("%d",&num);//                                         |
  16.                        //                                           |
  17.         printf("Before bits are reversed:\n");//                    |
  18.         printf("%7lld = ",num);//                                   |
  19.         bit(num,tnum);//                                            |
  20.         printf("\n"); //                                            |
  21.         //                                                          |
  22.         reversed(tnum,tnum1);//<-----------------------------------------這裡需
  23.         num1=zhuan(num1,tnum1);//<---------------------------------------要修改
  24.         printf("After bits are reversed:\n");
  25.         printf("%7lld = ",num1);
  26.         reversed(tnum,tnum1);
  27.         system("pause");
  28.         return 0;
  29. }

  30. void bit(long long int num,int tnum[])//?10?制???2?制
  31. {
  32.         int i=16;
  33.         for(i;i>=1;i--)
  34.         {
  35.             if(num <= pow(2,i) && num >= pow(2,i-1))
  36.             {
  37.                     tnum[16-i] = 1;
  38.                 num = num-pow(2,i-1);
  39.             }
  40.         }
  41.         for(i=0;i<8;i++)
  42.         {
  43.             printf("%d",tnum[i]);
  44.         }
  45.         printf(" ");
  46.         for(i=7;i<16;i++)
  47.         {
  48.                 printf("%d",tnum[i]);
  49.         }
  50. }

  51. void reversed(int tnum[],int tnum1[])//翻?
  52. {
  53.         int i;
  54.         for(i=0;i<8;i++)
  55.         {
  56.                 tnum1[i]=tnum[15-i];
  57.         }
  58.         
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 printf("%d",tnum1[i]);
  62.         }
  63.         printf(" ");
  64.         for(i=7;i<16;i++)
  65.         {
  66.                 printf("%d",tnum1[i]);
  67.         }
  68. }

  69. int zhuan(long long int num1,int tnum1[])//?2?制???10?制
  70. {
  71.         int i;
  72.         num1=0;
  73.         for(i=0;i<16;i++)
  74.         {
  75.                 if(tnum1[i]==1)
  76.                 {
  77.                     num1=num1+pow(2,15-i);
  78.                 }
  79.         }
  80.         return num1;
  81. }
复制代码

繼續學習把魚油們!!!!!!!!!!
不知是否解決你的問題還請你找出最佳解答!!!!!!!!!!!!!!!!!

最佳答案

查看完整内容

我找到問題點了,我先告訴你,為何,不行再看正確程式碼。 你在14行時就已經把num1的質給定下了,這時tnum1裡面都是0所以你的num1也只能等於0 ,所以後面num1的質就是0。 所以你應該要進行兩次reversed(tnum,tnum1); ,第一次在printf("After bits are reversed:\n");上面,同時要再加上num1=zhuan(num1,tnum1);, 還有在一開始宣告時宣告long long int num1=0;這樣就好不用宣告成 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-2 17:08:11 | 显示全部楼层    本楼为最佳答案   
本帖最后由 gary冥霧 于 2018-12-3 08:38 编辑

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

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

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

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

  7. int main()
  8. {
  9.         long long int num;//num<=65535,因?只有16位
  10.         int tnum[16] = {0};//?前的2?制
  11.         int tnum1[16] = {0};//?后的2?制
  12.         long long int num1=0;//zhuan(num1,tnum1);//<----------------
  13.           //                                                        |
  14.         printf("Enter an unsigned int:");//                         |
  15.         scanf("%d",&num);//                                         |
  16.                        //                                           |
  17.         printf("Before bits are reversed:\n");//                    |
  18.         printf("%7lld = ",num);//                                   |
  19.         bit(num,tnum);//                                            |
  20.         printf("\n"); //                                            |
  21.         //                                                          |
  22.         reversed(tnum,tnum1);//<-----------------------------------------這裡需
  23.         num1=zhuan(num1,tnum1);//<---------------------------------------要修改
  24.         printf("After bits are reversed:\n");
  25.         printf("%7lld = ",num1);
  26.         reversed(tnum,tnum1);
  27.         system("pause");
  28.         return 0;
  29. }

  30. void bit(long long int num,int tnum[])//?10?制???2?制
  31. {
  32.         int i=16;
  33.         for(i;i>=1;i--)
  34.         {
  35.             if(num <= pow(2,i) && num >= pow(2,i-1))
  36.             {
  37.                     tnum[16-i] = 1;
  38.                 num = num-pow(2,i-1);
  39.             }
  40.         }
  41.         for(i=0;i<8;i++)
  42.         {
  43.             printf("%d",tnum[i]);
  44.         }
  45.         printf(" ");
  46.         for(i=7;i<16;i++)
  47.         {
  48.                 printf("%d",tnum[i]);
  49.         }
  50. }

  51. void reversed(int tnum[],int tnum1[])//翻?
  52. {
  53.         int i;
  54.         for(i=0;i<8;i++)
  55.         {
  56.                 tnum1[i]=tnum[15-i];
  57.         }
  58.         
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 printf("%d",tnum1[i]);
  62.         }
  63.         printf(" ");
  64.         for(i=7;i<16;i++)
  65.         {
  66.                 printf("%d",tnum1[i]);
  67.         }
  68. }

  69. int zhuan(long long int num1,int tnum1[])//?2?制???10?制
  70. {
  71.         int i;
  72.         num1=0;
  73.         for(i=0;i<16;i++)
  74.         {
  75.                 if(tnum1[i]==1)
  76.                 {
  77.                     num1=num1+pow(2,15-i);
  78.                 }
  79.         }
  80.         return num1;
  81. }
复制代码

繼續學習把魚油們!!!!!!!!!!
不知是否解決你的問題還請你找出最佳解答!!!!!!!!!!!!!!!!!

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
sunnyrubik + 3 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-3 23:08:09 | 显示全部楼层
本帖最后由 sunnyrubik 于 2018-12-3 23:11 编辑
gary冥霧 发表于 2018-12-3 08:24
我找到問題點了,我先告訴你,為何,不行再看正確程式碼。

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


万分感谢您解决了我的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-11 08:37:46 | 显示全部楼层
sunnyrubik 发表于 2018-12-3 23:08
万分感谢您解决了我的问题。

不客氣,學習總會又問題,改進柴是最好的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表