2的1000次方怎么求啊??

rorykiki 2005-03-21 05:24:04
如题!!
...全文
1710 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
PMsg 2005-03-27
  • 打赏
  • 举报
回复
循环

int a = 1;
for( int i = 0; i < 1000; i++ )
a*= 2;
structme 2005-03-27
  • 打赏
  • 举报
回复

有半个月毛来了。。。。。发个话见量!
......有些人只是把一个算数的格式写了出来
你定义了什么double long double 但你们考虑了没?
也就只是10多位的准确性,还没考虑到数据益处。。。。存储最起码不是数组就是表

pcboyxhy(-273.15℃) ( ) 晕 你真是努力啊~那里都能见到你的身影!!! 还升了星星祝贺!





antter 2005-03-27
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;

void main()
{
const int N = 1000;
int i;
string rt("0x1");
for(i=0;i<N;i++)
rt += '0';
cout<<rt<<endl;
}

因该是最快的算法了 - -.
du51 2005-03-27
  • 打赏
  • 举报
回复
晕,看成阶乖了.
du51 2005-03-27
  • 打赏
  • 举报
回复
#include<iostream>
#include<stack>
#include<fstream>
using namespace std;
struct Node
{
int i;
Node *next;
};
Node *createNode()
{
Node *node=new Node;
node->i=0;
node->next=NULL;
return node;
}
Node* MulLink(Node *head,int i)
{
Node *p=head;
head->i=1;
p=head;
int temp=0;
for(int j=1;j<=i;j++)
{
while(p)
{
p->i*=j;
p->i+=temp;
if(p->i>9)
{
temp=p->i/10;
if(!p->next)
p->next=createNode();
p->i%=10;
p=p->next;
}
else
{
temp=0;
p=p->next;
}
}
p=head;
}
return head;
}
void displayLink(Node *head)
{
fstream outfile;
stack<int> display;
outfile.open("example.txt",ios::out|ios::ate);
while(head)
{
display.push(head->i);
head=head->next;
}
while(!display.empty())
{
cout<<display.top();
outfile<<display.top();
display.pop();
}
cout<<endl;
}
void freeLink(Node *head)
{
Node *p=head;
while(p)
{
head=p->next;
delete p;
p=head;
}
}
int main(int argc,char *argv[])
{
int n;
cout<<"Please input the number"<<endl;
cin>>n;
Node *head=createNode();
MulLink(head,n);
displayLink(head);
freeLink(head);
system("PAUSE");
return 0;
}
我的很慢呀.....晕.
nieweifeng2005 2005-03-27
  • 打赏
  • 举报
回复
呵呵,自己算出来真算!
alrmany 2005-03-27
  • 打赏
  • 举报
回复
用数组作吧,
不用数组作,类型一定溢出!!!!!
EriSeven 2005-03-27
  • 打赏
  • 举报
回复
justioo(周银辉) 正解!! 应该用位移
算法最好用汇编写,效率高。很多c标准数学函数都用汇编写的
antter 2005-03-27
  • 打赏
  • 举报
回复
//刚刚写了个16进制的,闲着写个10进制的..,很好理解就没注释了
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
const int N = 1000;
unsigned char tmp;
bool carry;
basic_string<char>::iterator is;
string rt;
int i,len;
rt = 1;
carry=0;
for(i=0;i<N;i++){
for(is=rt.begin();is!=rt.end();is++){
tmp = ((*is)<<1)+carry;
carry=false;
if(tmp>9){
carry= true;
tmp -= 10;
}
(*is) = tmp;
}
if(carry){
rt+=1;
carry=false;
}
}
for(is=rt.end()-1;is>=rt.begin();is--){
tmp = (*is) + '0';
cout<<tmp;
}
cout<<endl;
return 0;
}
hubinxi1981 2005-03-27
  • 打赏
  • 举报
回复
学习
QuickKeyBoard 2005-03-26
  • 打赏
  • 举报
回复
我给一个比较让人满意的代码吧。
此问题属于高精度运算问题,在windowsxp下用vc.net2003写的,当n为10000时,几乎看不到运行时间(pIII700),代码如下:

#include <iostream>
#include <iomanip>
#include <math.h>

using namespace std;
#define BASE 1000000000

int n,m;
int *data;

void out()
{
int i;
cout<<data[0];
for(i=1;i<m;i++)
{
cout.fill('0');
cout<<setw(9)<<data[i];
}
cout<<endl;
}

void cal()
{
int k=m-1;
for(int i=0;i<n-1;i++)
{
int j,p;
p=0;
for(j=m-1;j>=k;j--)
{
data[j]+=data[j]+p;
p=data[j]/BASE;
data[j]=data[j]%BASE;
}
if (p!=0)
{
k--;
data[k]=p;
}
}
}

void main()
{
cin>>n;
m=int(n*log10(double(2))+1) / 9 + 1;
data=new int[m];
memset(data,0,m*sizeof(int));

data[m-1]=2;
cal();

out();
delete [] data;
}
bingzhu 2005-03-26
  • 打赏
  • 举报
回复
哇 一个看似简单的问题 有怎么多的答案 小弟见识了 呵呵
michaelz2001 2005-03-26
  • 打赏
  • 举报
回复
1 << 1000;
shine51151 2005-03-26
  • 打赏
  • 举报
回复
今天下午抽了点时间看了一眼数据结构中介绍的一维数组的高级应用,知道了怎么用一维数组来存一个很大的数字,就设计了如下程序,希望把学到的这个思维方法贴出来与大家分享:

#include <iostream>
#include <cmath>
#include <conio.h>
using namespace std;

#define A 2
#define N 1000
#define M 5 // 每次乘 2^5=32
#define P 1000 // 数组每个元素中存的数取为 1000 进制


void main()
{

int Data[102]={0}, Digit=1, t;

/*
102为估计值,因为 2^10=1024, 计算 2^1000的结果要用 101 个数组元素(每个元素中存的数取为 1024 进制)来存放,所以估计一下 2^1000 要用每个元素取为 1000 进制的数组来存其长度起码要略大于101.
*/

register int i, j, k, r;

Data[1]=1;
t=(int)pow(A,M);

cout << "\t< Work out the rusult of a finite large power of some number >\n\n";

cout << A << " ^ " << N << " =\t";

for(i=1; i<(N/M)+1; i++)
{

for(j=1; j<(Digit+1); j++) // 数组元素从第 1 位开始使用,第 0 位不管
{
Data[j]*=t;
}

for(j=1;j<(Digit+1);j++)
{
if(Data[j]>P)
{
for(r=1;r<Digit+1;r++)
{
if(Data[Digit]>P)
{
Digit++;

/*
当数组中存放临时计算结果的最高部分位的元素的值大于 P (即 1000) 时,
进位并准备开始使用一个新的数组元素来存放结果的最高部分位.
*/
}

Data[r+1]+=Data[r]/P;

// 下一个数组元素的值 = 下一个位数组元素的值 + 此数组元素的值.

Data[r]=Data[r]%P;

// 此数组元素的值 = 此数组元素的值模 P (即 1000)的值.

}
}
}
}

for(k=Digit;k>0;k--)
{
cout << Data[k];

// 按照由高位到低位的顺序依次输出数组元素的值即得最后结果
}

cout << endl << endl;

getch();

}
greenteanet 2005-03-26
  • 打赏
  • 举报
回复
我觉得把结果作为字符串存起来,然后转化为数字,这样子好点..
Wolf0403 2005-03-26
  • 打赏
  • 举报
回复
2 << 1000
哈哈
xl5338870 2005-03-26
  • 打赏
  • 举报
回复
[1] 1000个2相乘的结果有多少十进制位? [1000 * log2] + 1 = [1000 * 0.301 ] + 1 = 302(位)
[2] 这么大的整数不能直接表示,建立一个数组int largeN[302];用每个数组元素来保存每一位
[3] 在数组上模拟手工乘法计算2^1000。
defyer007 2005-03-26
  • 打赏
  • 举报
回复
pcboyxhy(-273.15℃) ( ) 信誉:100
能否把思想说一下?谢谢~
andyliuyi 2005-03-24
  • 打赏
  • 举报
回复
#include "stdio.h"
double sort(double base,int n);

void main()
{
double b;
b=sort(2,1000);
printf("%.0f",b);
}

double sort(double base,int n)
{
int i;
double s;
s=1;
for(i=1;i<=n;i++)
{
s*=base;

}
return s;
}
晨星 2005-03-23
  • 打赏
  • 举报
回复
whiteseal(whiteseal(我是个追 族))
的方法只能保证前边15位有效数字是准确的。:)
加载更多回复(16)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧