计算2的1000次并输出

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:12:07
ACM里的题目,原题是:
细菌分裂
Description

有一种细菌,它每天都会分裂一次。例如:第一天有1个,第二天就有2个,第三天就
变成4个,……。现在告诉你第一天的日期和细菌个数,要求你编写一段程序计算将来某一
天细菌的数目。

Input

输入数据分为3行。
第一行是一个整数,代表细菌第一天的数目。
第二行是第一天的日期,格式见示例。
第三行是目标日期,格式和第二行相同。

Output

输出只有一行,即要求的那一天的细菌数(这个数字可能很大,最大有1000位)。

Sample Input
1
2009-01-01
2009-01-08

Sample Output
128
现在输出遇到了问题(不知道怎么处理一个很大的数字),高手帮忙给点思路
各位的答案都不错,不过分只能给一个,就给最先回答的了, 这里提醒Baigle一下,你没完成2^1000的运算哦~问题总结:高精度运算,运用数组模拟运算既可!(以后来看贴的人记住这句话就可以了)

给个思路:

大数的乘法(乘方)联想到使用高精度 定义个数组做

2^1000大概是10^302 开一个大于302的int型数组,然后模拟乘法运算即可

1000位就将数组设定在1000以上即可

给个算2^1000程序参考,你那个程序就是把天数差算出来,初始化数组a中内容为第一天细菌数量,然后和我的程序一样的方法来计算结果

#include <iostream>
using namespace std;
#define MAXSIZE 350 //这里定义一个比最终结果最大位数大的数

int main()
{
//这里计算下天数差
int a[MAXSIZE], i, j, pos;
for(i=0; i<MAXSIZE; i++) a[i]=0;
a[0]=1; //这里初始化为第一天细菌数量,注意a[0]为个位数a[1]为十位数以此类推
pos=0; //pos初始化为初始a中有效数据位数-1
for(i=0; i<1000; i++) //这里改为i=0到i<天数差
{
for(j=0; j<=pos; j++) a[j]=a[j]*2;
for(j=0; j<MAXSIZE-1; j++)
if(a[j]>9)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
if(pos<j+1) pos=j+1;
}
}
for(i=pos; i>=0; i--)
cout<<a[i];
cout<<endl;
return(0);
}

我想你的电脑没有这么大的内存,2^1000>10^250呵呵2^1000=2^50G
#include <stdio.h>
main()
{

"编程计算1000!并输出" 的源程序 编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。 从键盘输入一个正整数,计算该数的各位数字之和并输出,例如输入数是5246,则计算5+2+4+6并输出 写一个完整的JAVA程序使用循环结构计算2 4 6 8.... 1000的和并输出运算结果 急!VB编程:计算从1到1000中的能被1整除的数,并输出 (2)用结构体建立一个学生成绩单,计算学生的平均成绩和不及格人数,并输出。 Java:输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积 2.编写函数fun,它的功能是:计算并输出下列级数和: 用循环实现1+3+5+….+99的计算,并输出结果 计算1到20的平方和,并输出结果。 要求用for循环