队花的烦恼一
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
ACM队的队花C小+经常抱怨:“C语言中的格式输出中有十六、十、八进制输出,然而却没有二进制输出,哎,真遗憾!谁能帮我写一个程序实现输入一个十进制数n,输出它的二进制数呀?”
难道你不想帮帮她吗?^_^
-
输入
-
输入有多个数据,数据以EOF结束;每个数据ni(0<=ni<=1000010000)用空格隔开;
(温馨提示:EOF即是一个文件的结束标志;while(scanf("%d",&n)!=EOF){})
输出
-
输出有多行,每行对应一个十进制数ni的二进制数;
注意:输出的二进制去掉任何一个多余的0;
样例输入
-
0 1 2 10
样例输出
-
0 1 10 1010
求问为何在循环时 i=30不能过,i=29就能过, a[30]为什么存的会是输进去的数n???
01.
#include<iostream>
02.
using
namespace
std;
03.
int
main()
04.
{
05.
int
n;
06.
while
(cin>>n)
07.
{
08.
int
m=1,i=0,r,a[30]={0};
09.
if
(n==0)
10.
{
11.
cout<<
"0"
<<endl;
continue
;
12.
}
13.
while
(n)
14.
{
15.
r=n%2;
16.
a[i]=r;
17.
i++;
18.
n=n/2;
19.
}
20.
int
k=1;
21.
for
(
int
i=29;i>=0;i--)
22.
{
23.
if
(k)
24.
{
25.
if
(a[i]!=0)
26.
{
27.
cout<<a[i];
28.
k=0;
29.
}
30.
}
31.
else
32.
cout<<a[i];
33.
}
34.
cout<<endl;
35.
}
36.
return
0;
37.
}
-
输入有多个数据,数据以EOF结束;每个数据ni(0<=ni<=1000010000)用空格隔开;