说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

2的100次幂?

编辑:说三道四文库 发布时间:2018-01-19 05:51
HTML文档下载 WORD文档下载 PDF文档下载
给一个完整的代码!!!
其实这里有一个个很快的,很明了的解法。即用移位运算:2^2=1<<2,2^4=1<<4...2^100=1<<100
所以,解法就很简单了,如下:
long lRst=1;
lRst=lRst<<100;

^_^ 如果你认为不错,give me the score!
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(与非公子):

long存放不下101个二进制数的
#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;
}
即使也unsigned long 也只能算到2^14。
哈哈
njtu兄有趣,

http://bbs.tencent.com/cgi-bin/bbs/bbs_old_content?groupid=102:10047&messageid=155007
我觉得为了节省空间,不妨用个结构或 C++ 中的类来表示指数形式。
用结构表示:
struct exponent {
    char sign;         /* 符号 '+' '-'*/
    unsigned int base; /*     底数    */
    int exp;           /*     指数    */
};
typedef exponent Exponent;

Exponent A;
A.sign = '+';
A.base = 2;
A.exp = 100;

然后设计一套处理指数的运算法则。

看!
http://expert.csdn.net/Expert/topic/2430/2430750.xml?temp=.6342737
的思路!
道理完全一样!
program2100(住地球 去火星工作)

思想不错!
是的,上面的移位算法是只能计算有限的大小,但是你只要稍做修改,就可以计算无穷大的数据啊,算法都是一样,每有啥两样的.如下:
#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时有点罗嗦,其实思维的严谨更重要.大家说是吧!
上面还需要修改:
if(n%8==0)//在刚好是8bit的整数倍时
a[N-n/8-1]=1;
else
a[N-n/8-1]=1<<(n%8);
在上面显示出来的结果是不对的,但是在数组中存储的值需要用二进制显示才对.
数据是从第N-n bit开始到结束
VB如何在VB中制作不回显的文本框 VB如何制作浮动式窗口 闪烁的Label-VB资料 设定StatusBar的文字成不同的颜色-VB资料 设计一个可中断循环的按钮-VB资料 救命!我在2000下开发的程序,到98下全都变形了??? 寻找一个利用Sample Grabber截图的VC例子. 拼图问题 有关opengl多视图绘制????? Redhat Linux6.1 ftp问题请教? 50分急救!计算机一上网就重启。 REDHAT LINUX多少版本后开始支持ADSL拨号的? 用Internet Transfer编写FTP程(改原码) LINUX下安装问题? 湖北省宜昌市“三峡日报”那里买的到?万分感激 求华罗庚的照片 怎样写悼词?那里有参考? 谁能给我写个追悼词.我想给自己写个悼念词,等我死后 父亲的悼词怎么写父亲中国共产党员,退休职工,于20 父亲悼词怎么写 如何写追悼词 语录润心田,作文 600字如题,题目没错(就是语录 关于语言魅力的作文 首条横跨欧亚海底隧道启用 可乘火车从美国有意叫停窃听盟国元首 部门“内讧哈萨克斯坦举办首届国际美食节 各国顶乌克兰法院裁定没收季莫申科女儿名下饭秘鲁高等法院驳回藤森在家服刑申请恶性肿瘤应标本兼治有瑕之玉蕴藏无瑕之美黄磊、何炅、蒋雯丽接连登场飞一般的蜀黍汀江魂花都里的道士伪道网游之天下无贼超级神兽养成大师网游之全职平民南山风情街旅游翠微园旅游贵州博物馆旅游黄岩旅游赋春旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘