|
6鱼币
这是题目的要求,但在最后一步二进制转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[16] = {0};//换前的2进制
- int tnum1[16] = {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[16-i] = 1;
- num = num-pow(2,i-1);
- }
- }
- for(i=0;i<8;i++)
- {
- printf("%d",tnum[i]);
- }
- printf(" ");
- for(i=7;i<16;i++)
- {
- printf("%d",tnum[i]);
- }
- }
- void reversed(int tnum[],int tnum1[])//翻转
- {
- int i;
- for(i=0;i<8;i++)
- {
- tnum1[i]=tnum[15-i];
- }
-
- for(i=0;i<8;i++)
- {
- printf("%d",tnum1[i]);
- }
- printf(" ");
- for(i=7;i<16;i++)
- {
- printf("%d",tnum1[i]);
- }
- }
- int zhuan(long long int num1,int tnum1[])//将2进制转换为10进制
- {
- int i;
- num1=0;
- for(i=0;i<16;i++)
- {
- if(tnum1[i]==1)
- {
- num1=num1+pow(2,15-i);
- }
- }
- return num1;
- }
复制代码
本帖最后由 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而已,
如果還有不會的就提問我會盡量回答
正確程式碼如下:
- #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[16] = {0};//?前的2?制
- int tnum1[16] = {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[16-i] = 1;
- num = num-pow(2,i-1);
- }
- }
- for(i=0;i<8;i++)
- {
- printf("%d",tnum[i]);
- }
- printf(" ");
- for(i=7;i<16;i++)
- {
- printf("%d",tnum[i]);
- }
- }
- void reversed(int tnum[],int tnum1[])//翻?
- {
- int i;
- for(i=0;i<8;i++)
- {
- tnum1[i]=tnum[15-i];
- }
-
- for(i=0;i<8;i++)
- {
- printf("%d",tnum1[i]);
- }
- printf(" ");
- for(i=7;i<16;i++)
- {
- printf("%d",tnum1[i]);
- }
- }
- int zhuan(long long int num1,int tnum1[])//?2?制???10?制
- {
- int i;
- num1=0;
- for(i=0;i<16;i++)
- {
- if(tnum1[i]==1)
- {
- num1=num1+pow(2,15-i);
- }
- }
- return num1;
- }
复制代码
繼續學習把魚油們!!!!!!!!!!
不知是否解決你的問題還請你找出最佳解答!!!!!!!!!!!!!!!!!
|
最佳答案
查看完整内容
我找到問題點了,我先告訴你,為何,不行再看正確程式碼。
你在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;這樣就好不用宣告成 ...
|