十进制转二进制的算法,错在哪里

来源:百度知道 编辑:UC知道 时间:2024/06/30 04:36:03
#include <iostream>
using namespace std;

int *Change( int n )
{
int *a = new int[ 8 ];
int i = 0;
int mask=0x8000;
while(mask)
{
a[ i++ ] = ( mask & n ?1:0);
mask>>=1;
}
for ( i = 0; i < 8; i++ ) cout << a[ i ];
return a;
}

int main()
{
int n;
cout << "enter the number: ";
cin >> n;
Change( n );
int *a = new int[ 8 ];
for ( int i = 0; i < 8; i++ ) cout << a[ i ];

system( "pause" );
return 0;
}

1 new 出来的内存没有释放。应该在主函数假装delete [] a;(或者直接在主函数声名一个int tmp[8])
2 申请的内存空间没有初始化。在new之后应该加上memset(a,0,16*sizeof(int));
3 主函数部分应当这样写int *a = Change( n ); (把两句合成一句)
4 其他的关于数字位数的问题就留给你自己解决吧。希望你想出来优雅快速的解决方法!(你现在的程序如果输入10的话,那结果是10100000 这是不正确的)
5 分配的内存太少了。应当是new int[16];

按照我刚才说的,修改后程序如下
#include <iostream>
using namespace std;

int *Change( int n )
{
int *a = new int[ 16 ];
memset(a,0,16*sizeof(int));
int i = 0;
int mask=0x8000;
while(mask)
{
a[ i++ ] = ( (mask & n) ?1:0);
mask>>=1;
}
return a;
}

int main()
{
int n;
cout << "enter the number: ";
cin >> n;

int *a = Change( n );
for ( int i = 0; i < 16; i++ ) cout << a[ i ];
delete [] a;
system( "pause" );
return 0;
}

/*
输入一十进制整数,输出其N进制数。
#include<iostream.h>
#def