2的n次方(n为n属于正整数数)的末位数字有何规律

1610人阅读
题目:判断一个正整数num是否可表示为2的N次方。
对于这样一道题目,最简单的做法就是定义一个变量,并让其以2的n(n=0,1,2,3,...)次方递增,每次递增后与num比较,如果相等则返回true,直到递增到大于num,返回false。
/************************************************************************/
判断一个正整数num是否为2的N次方(常规解法1)
算法时间复杂度为O(logN),空间复杂度为O(1)
/************************************************************************/
bool Is2pow_1(unsigned int num) {
unsigned int temp = 1;
while(temp &= num) {
if (temp == num) {
temp = temp * 2;
}以下解法2,可以在算法性能上有所提高。(位运算的性能高于乘法运算)
/************************************************************************/
判断一个正整数num是否为2的N次方(常规解法2)
算法时间复杂度为O(logN),空间复杂度为O(1)
/************************************************************************/
bool Is2pow_2(unsigned int num) {
unsigned int temp = 1;
while(temp &= num) {
if (temp == num) {
temp = temp && 1; // 位运算比乘法运算性能高,在一定程度提高性能
}对于以上解法1和解法2,在本质上都是一样的,没有减少算法的时间复杂度。
下面的解法才是真正的算法优化,将时间复杂度降到了O(1)。
/************************************************************************/
判断一个正整数num是否为2的N次方
基本思想:
是否为2的乘方
算法时间复杂度为O(1),空间复杂度为O(1)
/************************************************************************/
bool Is2pow(unsigned int num) {
if (num == 0){
return (num & (num-1)) == 0;
以上算法,主要是利用与运算进行性能的优化,根据于此,我们可以扩展出如下两个基本的题目:
扩展题目1:给定一个正整数num,求其二进制中&1&的个数。
扩展题目2:给定一个正整数num,求其二进制中&0&的个数。
以上扩展题目的程序代码如下:
/************************************************************************/
计算一个正整数num转化为二进制后,&1&的个数。
基本思想:从右到左依次去除&1&,并统计其个数。
算法的计算次数只与num的位数有关,与其大小无关。
算法时间复杂度为O(logN),空间复杂度为O(1)
/************************************************************************/
unsigned int NumberofOne(unsigned int num) {
int count = 0;
while (num) {
num = num & (num-1);
/************************************************************************/
计算一个正整数num转化为二进制后,&0&的个数。
基本思想:从右到左依次与1进行与操作,并统计其个数。
算法的计算次数只与num的位数有关,与其大小无关。
算法时间复杂度为O(logN),空间复杂度为O(1)
/************************************************************************/
unsigned int NumberofZero(unsigned int num) {
int count = 0;
while (num) {
if ((num & 0x01) != 1){
num = num && 1;温馨提示:糗事百科为大家收集了很多的2的n次方的末尾数字有何规律的糗事,各种关于2的n次方的末尾数字有何规律的爆笑经历,尴尬时刻和开心视频,想持续关注2的n次方的末尾数字有何规律的糗事就收藏本页吧。
扫码下载糗事百科app扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
2的N次方是几位数?求规律!求2的N次方是几位数的规律.
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
答,规律就是
[ N*log2 ]
(其中[]表示取整的意思,log2=0..)
2的30次方的位数 = [9.038]+1 =10
2的5次方的位数 = [1.505]+1 = 2
2的200次方的位数 = [60. = 61
所以规律就是 N*0. 取整再加1
为您推荐:
其他类似问题
由N的取值范围确定
答:取对数是好方法,用常用对数底为10,则能对一个正整数进行位数判断设2^N是k位数,则:10^(k+1)>2^N>10^k取对数得:k+1>log(2^N)=Nlog2>k所以:k=Nlog2整数位+1所以:k=[Nlog2]+1您还是用计算器验证一下吧,这个规律对小数成立但大数差很远。...
扫描下载二维码扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
2的N+2000次方-2的N次方的末位数是多少
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
02^(N+2000)-2^N=2^N(2^2000-1)由于2的4n次方末位都是6,所以2^2000末位也是6,6-1=5,而2^N末位总是偶数,所以2的N+2000次方-2的N次方的末位数是0.
为您推荐:
其他类似问题
扫描下载二维码3被浏览1,487分享邀请回答1添加评论分享收藏感谢收起写回答}

我要回帖

更多关于 输入两个正整数m和n 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信