#ifndef COUNT_ZERO_H
#define COUNT_ZERO_H
#include<iostream>
#include<cstdlib>
using namespace std;
#define JINZHI 2;//设置进制
int * dectobi(const int a)
{
//static int r[32]={0};//静态的设置数组为全局变量,在下一次调用函数时,
//会使用上一次运行完r的值,所以在每次计算是要对数组r初始化。而把数组全部初始化为0
//只有在声明的时候可以r[32]={0}这样设置,其他时候要一个个元素初始化
int * r=new int [32] ;//用于返回数组指针
//int t[32] = { 0 };
for (int i = 0; i<32; ++i)//初始化数组r;
r[i] = 0;
int temp;
if (0 == a) { return r; }
else
{
if (a > 0)
{
r[31] = 0;//设置符号位
int i = 0;
temp = a;
for (; temp > 0; ++i)
{
r[i] = temp % JINZHI;//取余数赋给r[i]
temp = temp / JINZHI;//取商赋给temp,即可进行下一次计算
}
return r;
}
else
{
r[31] = 1;
int i = 0;
temp = -a;
for (; temp > 0; ++i)
{
r[i] = temp % 2;
temp = temp / 2;
}
return r;
}
}
}
int findzero(int m)
{
int countwei = 0, countzero = 0;
int * t = dectobi(m);
for (int i = 0; i < 32; ++i)
{
if (1 == *(t + 30 - i))++countwei;
if (countwei >= 1)//找到了1后才进行0的统计
{
if(0 == *(t + 30 - i))++countzero;//
}
}
return countzero;
}
#define COUNT_ZERO_H
#include<iostream>
#include<cstdlib>
using namespace std;
#define JINZHI 2;//设置进制
int * dectobi(const int a)
{
//static int r[32]={0};//静态的设置数组为全局变量,在下一次调用函数时,
//会使用上一次运行完r的值,所以在每次计算是要对数组r初始化。而把数组全部初始化为0
//只有在声明的时候可以r[32]={0}这样设置,其他时候要一个个元素初始化
int * r=new int [32] ;//用于返回数组指针
//int t[32] = { 0 };
for (int i = 0; i<32; ++i)//初始化数组r;
r[i] = 0;
int temp;
if (0 == a) { return r; }
else
{
if (a > 0)
{
r[31] = 0;//设置符号位
int i = 0;
temp = a;
for (; temp > 0; ++i)
{
r[i] = temp % JINZHI;//取余数赋给r[i]
temp = temp / JINZHI;//取商赋给temp,即可进行下一次计算
}
return r;
}
else
{
r[31] = 1;
int i = 0;
temp = -a;
for (; temp > 0; ++i)
{
r[i] = temp % 2;
temp = temp / 2;
}
return r;
}
}
}
int findzero(int m)
{
int countwei = 0, countzero = 0;
int * t = dectobi(m);
for (int i = 0; i < 32; ++i)
{
if (1 == *(t + 30 - i))++countwei;
if (countwei >= 1)//找到了1后才进行0的统计
{
if(0 == *(t + 30 - i))++countzero;//
}
}
return countzero;
}
#endif
#include<iostream>
#include"coutzero.h"
int main()
{
int m;
cout << "Enter an int number(Nonnumber to quit) : ";
while (cin >> m&&cin.get() == '\n')
{
cout << "十进制数: " << m << " 的二进制表达为 :\n";
int *r;
r = dectobi(m);
for (int i = 0; i < 32; ++i)
cout << *(r + 31 - i) << "\t";
cout << "\n其中有 " << findzero(m) << " 个零\n";
cout << "Enter an int number(Nonnumber to quit) : ";
}
return 0;
}