您的位置:首页 > 其它

算法提高 不大的数

2017-04-25 20:00 148 查看
算法提高 不大的数

时间限制:300ms 内存限制:8.0MB

提交此题

目前已AC者

  刘啸宇

  章放

问题描述

  在当今的大数据时代,超大数的高精度计算已经成为众多领域的热门研究之一。现在T校也想在此领域有所造诣已造福于全社会,然而由于时间有限,所以短时间内难以找出大数计算的通用算法,于是学校找到了同学中的“神霸”——你来帮忙,并仅要求你能在数并不算大的时候给出结果。又出于某种特殊需要,也并不要求你给出数的全部结果,而只是要求结果的前10位(注意不是后10位),并考虑到2的幂次的特殊性和典型性,所以要你计算的数均为2的幂次。

输入格式

  一个自然数n。

输出格式

  2的n次幂的前10位。

样例1 输入

  60

样例1 输出

  1152921504

样例2 输入

  60000

样例2 输出

  6305794870

数据规模和约定

  0<=n<=10000000

注释

  =。=

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
cin>>n;
double t=1.0;
for (int i=1;i<=n;i++)
{
t*=2;
if (i>=34&&i%10==0)
//当乘了34次之后会大于十位,之后的每乘10次,
//就是乘1024.所以除1000
{
t/=1000;
}
if (i%971==0)
{
t/=10;
}
}
long long int  temp=t;
int  sum=0;
while(temp)//计算总共多少位
{
temp/=10;
sum++;
}
while(sum>10)//留下前十位
{
t/=10;
sum--;
}
temp=t;
printf("%lld",temp);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: