二进制转十进制
n
为输入的二进制数,d用来处理该数。
k为标志位,当k为1时表示输入的数有问题,需要重新输入。
i为每次分解的个位数;j为二进制的权值;m为累计的十进制和;p为输入的数的位数,超过10时,该数越界,需要重新输入,定k=1。
程序如下:
#include
main()
{
long
int
n,d;
int
k,i,j,m,p;
do
{
k=0;
m=0;j=1;i=0;p=0;
printf("\ninput
an
number
only
includes
0
or
1:");
scanf("%ld",&n);
if(n<0)
k=1;
d=n;
while(d)
{
i=d%10;p++;
if(i>1
||
p>10)
{k=1;break;}
m+=i*j;
j=j*2;
d/=10;
}
}
while(k==1
||
m==0);
printf("\n
the
number
is
%d\n",m);
getch();
}
#include
/*将十进制数以任意进制输出(2到16进制),参数为非负整数
n要转换的数(十进制)
j目标进制*/
void
outstring(int
n,
int
j)
{
static
char
s[256];
char
t;
int
i
=
0;
int
k;
if
(j
<=
1
||
j>16)
return;
while
(n)
{
k
=
n%j;
if
(k
<
10)
s[i++]
=
'0'+k;
else
s[i++]
=
'A'+k
-
10;
n
/=
j;
}
s[i--]
=
0;
for
(k
=
0;
k
<
i;
k++,
i--)
t
=
s[k],
s[k]
=
s[i],
s[i]
=
t;
printf("%s",
s);
}
int
main(void)
{
int
i;
int
j;
for
(i
=
1;
i
<
32;
i++,
printf("\n"))
for
(j
=
2;
j
<
17;
printf("\t"),
j++)
outstring(i,
j);
return
0;
}