社区
C语言
帖子详情
2的100次幂?
yxd216
2003-11-06 04:22:51
给一个完整的代码!!!
...全文
237
11
打赏
收藏
2的100次幂?
给一个完整的代码!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lwqyu03
2003-11-07
打赏
举报
回复
是的,上面的移位算法是只能计算有限的大小,但是你只要稍做修改,就可以计算无穷大的数据啊,算法都是一样,每有啥两样的.如下:
#define N 14
int main(int argc, char* argv[])
{
unsigned char a[N];//在此保证能够储存下最长的bit位就行了.N=14可存112b大的数据
int n; //在此假设为计算2^n
char x=64;
for(n=2;n<100;n++)
{ //计算并显示2^2到2^100
memset(a,0,N);//初始化
a[N-n/8-1]=1<<(n%8); //计算2^n
//下面只是显示控制而已
printf("2^%d=",n); //显示提示信息
printf("%d",a[N-n/8-1]);//显示高为非零数据
for(int i=N-n/8;i<N;i++)//显示低为的0
printf("%02d",a[i]);
printf("\n");
}
}
或许有人认为显示后面的0时有点罗嗦,其实思维的严谨更重要.大家说是吧!
lwqyu03
2003-11-07
打赏
举报
回复
上面还需要修改:
if(n%8==0)//在刚好是8bit的整数倍时
a[N-n/8-1]=1;
else
a[N-n/8-1]=1<<(n%8);
在上面显示出来的结果是不对的,但是在数组中存储的值需要用二进制显示才对.
数据是从第N-n bit开始到结束
Andy84920
2003-11-06
打赏
举报
回复
program2100(住地球 去火星工作)
思想不错!
Robin
2003-11-06
打赏
举报
回复
看!
http://expert.csdn.net/Expert/topic/2430/2430750.xml?temp=.6342737
的思路!
道理完全一样!
TianGuangZao
2003-11-06
打赏
举报
回复
我觉得为了节省空间,不妨用个结构或 C++ 中的类来表示指数形式。
用结构表示:
struct exponent {
char sign; /* 符号 '+' '-'*/
unsigned int base; /* 底数 */
int exp; /* 指数 */
};
typedef exponent Exponent;
Exponent A;
A.sign = '+';
A.base = 2;
A.exp = 100;
然后设计一套处理指数的运算法则。
lbaby
2003-11-06
打赏
举报
回复
哈哈
njtu兄有趣,
http://bbs.tencent.com/cgi-bin/bbs/bbs_old_content?groupid=102:10047&messageid=155007
lixuehui
2003-11-06
打赏
举报
回复
即使也unsigned long 也只能算到2^14。
njtu
2003-11-06
打赏
举报
回复
#include <iostream>
#using namespace std;
//注意:由于该程序经过高级优化,效率极高。属世界尖端技术,源代码严格保密。
int main()
{
cout<<"运算开始..."<<endl;
cout<<"结果用二进制数表示为:"<<endl;
cout<<"1";
for (int i = 0; i < 100; i++)
{
cout<<"0";
}
cout<<endl;
return 0;
}
program2100
2003-11-06
打赏
举报
回复
lwqyu03(与非公子):
long存放不下101个二进制数的
program2100
2003-11-06
打赏
举报
回复
2^100 = 1024 ^10 = 0x10 0000 0000 0000 0000 0000 0000 就是10^30的级别,看来得用数组存放数据。
1、 将2^100 分解为 2^63 * 2^37
2、 采用64X64的方法来解,结果逆向存在数组里。
3、 逆向输出数组内容
ULONGLONG num1=0,num2=0,num3=0;
unsigned char result[128];
unsigned char tempresult=0,k=0,s=0,t_result=0;
unsigned int i=0,j=0;
num1=pow(2,63);
num2=pow(2,37);
//初始化结果数组,将元素值置为0
for(i=0;i<128;i++) result[i]=0;
//64X64的运算
for(i=0;i<64;i++)
{
k=num2%10;
num2/=10;
if (0==k) continue;
num3=num1;
tempresult=0;
for(j=0;j<64;j++)
{
s=num3%10;
num3/=10;
t_result=result[i+j];
result[i+j]=(t_result + k*s + tempresult)%10;//个位数
temresult=(t_result + k*s + tempresult)/10; //十位数(进位)
}
}
//现在只需要逆向输出结果就可以了。
lwqyu03
2003-11-06
打赏
举报
回复
其实这里有一个个很快的,很明了的解法。即用移位运算:2^2=1<<2,2^4=1<<4...2^100=1<<100
所以,解法就很简单了,如下:
long lRst=1;
lRst=lRst<<100;
^_^ 如果你认为不错,give me the score!
如何判断一个数是否为4的
幂
次
方?若是,并判断出来是多少
次
方?
将4的
幂
次
方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0; 因此问题可以转化为判断1后面是否跟了偶数个0就可以了。4的整数
次
幂
的二进制数都为 (4)
100
、(16)
100
00、(64)
100
0000……另外,4的
幂
次
方4^n也可以写为2^(2*n),即也可以写为2的
幂
次
方,当然就满足2的
幂
次
方的条件了,即num & num-1==0。思路:首先用条件num & num-1==0来判断是否为2的
幂
次
方,若不满足,则不是。若满足,在用条件num & 0x55555555来判断,若为真,则这个整数是4的
幂
次
方,否则不是。使用递归来实现的代码如
Java面试题-Web相关.pdf
二、如何理解 RESTful API
幂
等性 1、什么是
幂
等性? HTTP
幂
等方法,是指无论调用多少
次
都不会有不同结果的HTTP方法。不管你调用一
次
,还是调用一百
次
,一千
次
,结果都是相同的。 GET /tickets # 获取ticket列表 GET /tickets/12 # 查看某个具体的ticket POST /tickets # 新建一个ticket PUT /tickets/12 # 更新ticket 12 PATCH /tickets/12 # 更新ticket 12 DELETE /tickets/12 # 删除ticket 12 2、HTTP GET方法 3、HTTP POST方法 4、HTTP PUT方法 5、HTTP PATCH方法 6、HTTP DELETE方法 三、如何设计符合
幂
等性的高质量 RESTful API?
判断一个正整数是否是2的整数
次
幂
???
判断一个正整数是否是2的整数
次
幂
??? 实现一个方法,来判断一个正整数是否是2的整数
次
幂
(如16是2的4
次
方,返回 true;18不是2的整数
次
幂
,则返回false)。 法一:暴力法 思路: 1.变量temp从1一直以2
次
幂
增加,当增加到temp = target就返回true; 2.如果temp > target直接返回false; public boolean funV1(int a) { int temp=1; //迭代变量,从1开始 whil
为什么HashMap默认初始容量为2
次
幂
?不是2
次
幂
会怎样?讲讲 HashMap 扰动函数?
关于HashMap的详解文章请移步:链接: HashMap源码研究——源码一行一行的注释 通过看源码,我们发现,判断桶的索引的实现是 i = ( n - 1 ) & hash,其中 n 是 map 的容量。任何 2 的整数
幂
- 1 得到的二进制都是 1,如:16 - 1 = 15(1111);32 - 1 = 31(11111)而 n-1 与 hash 做的是与运算(&),与运算是 两个都为1,才为1既然我们的 n-1 永远都是 1,那 ( n - 1 ) & hash 的计算结果就是 低位的hash
java 如何判断一个数是否为2的整数
次
幂
以及是2的多少
次
方(整数
幂
)?
写在前面,此处不考虑负数!!! 如何简洁快速的判断一个正整数是否是2的整数
次
幂
,以及如果是整数
次
幂
,是多少
次
幂
?方法非常简单。 话不多说,先上代码; public static int isTimesTwo(int n) throws Exception { if(!(n > 0 && (n & (n - 1)) == 0)){ throw new Exception("参数有误,不是2的整数
次
幂
"); } return
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章