输入十进制数,计算其二进制表达中的零的个数(遇到第一个1之前的零不计入统计)

#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;
}

#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;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值