二进制转十进制失败,请大家帮帮忙
这是题目的要求,但在最后一步二进制转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-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:11 编辑
gary冥霧 发表于 2018-12-3 08:24
我找到問題點了,我先告訴你,為何,不行再看正確程式碼。
你在14行時就已經把num1的質給定下 ...
万分感谢您解决了我的问题。{:5_110:} sunnyrubik 发表于 2018-12-3 23:08
万分感谢您解决了我的问题。
不客氣,學習總會又問題,改進柴是最好的
页:
[1]