您的位置:首页 > 其它

算法提高 不大的数

2017-12-13 11:55 162 查看
  算法提高 不大的数  
时间限制:300ms   内存限制:8.0MB
    
目前已AC者

  刘啸宇
  章放

问题描述

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

输入格式

  一个自然数n。

输出格式

2的n次幂的前10位。

样例1 输入

60

样例1 输出

1152921504

样例2 输入

60000

样例2 输出

6305794870

数据规模和约定

0<=n<=10000000

具体分析参见博客:https://www.liuchuo.net/archives/1322

#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
double t=1.0;
int i;
for(i=1;i<=n;i++)
{
t=t*2;
if(i>=34&&i%10==0)
//当乘以2的次数超过或者等于34次的时候,就会超过10位数字
t=t/1000;/相当于乘2^10,即1024
if(i%971==0)
//每乘以971个2后除以10
t=t/10;/让要求的数除以10保证不会溢出
}
long long temp=t;
int sum=0;
while(temp)
{
temp=temp/10;
sum++;
}
while(sum>10)
{
t=t/10;
sum--;
}
long long d=t;
printf("%I64d",d);

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: