zoukankan      html  css  js  c++  java
  • luogu 1045 麦森数

    题目大意:

    从文件中输入P1000<P<3100000),计算2^P1的位数和最后500位数字(用十进制高精度数表示)

    思路:

    一道高精度练习题

    其中位数是一个结论 位数=[P*log2]+1

    然后就是高精度,因为作死的压位打了好久

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<queue>
     9 #define inf 2139062143
    10 #define ll long long
    11 #define MAXN 6010
    12 #define MOD 10000
    13 using namespace std;
    14 inline int read()
    15 {
    16     int x=0,f=1;char ch=getchar();
    17     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    18     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    19     return x*f;
    20 }
    21 int n;
    22 struct bign
    23 {
    24     int len,num[125];
    25     bign(){len=0;memset(num,0,sizeof(num));}
    26     void Print()
    27     {
    28         for(int i=124;i>0;i--)
    29             if(i%25==12) printf("%02d
    %02d",num[i]/100,num[i]%100);
    30             else if(i%25==0) printf("%04d
    ",num[i]);
    31             else printf("%04d",num[i]);
    32         printf("%04d",num[0]-1);
    33     }
    34 };
    35 bign mul(bign a,bign b)
    36 {
    37     bign res;int t;
    38     //cout<<"a: ";a.Print();cout<<"b: ";b.Print();
    39     for(int i=0;i<=a.len;i++)
    40         for(int j=0;j<=b.len;j++)
    41         {
    42             t=a.num[i]*b.num[j];
    43             if(i+j<=124) 
    44                 if(i+j<124) res.num[i+j]+=t,res.num[i+j+1]+=res.num[i+j]/MOD,res.num[i+j]%=MOD;
    45                 else res.num[i+j]+=t,res.num[i+j]%=MOD;
    46         }
    47     for(int i=0;i<=124;i++)
    48         if(res.num[i]) res.len=i;
    49     return  res;
    50 }
    51 void q_pow()
    52 {
    53     bign ans,t;ans.num[0]=1,t.num[0]=2;
    54     while(n)
    55     {
    56         if(n&1) ans=mul(ans,t);
    57         t=mul(t,t);
    58         n>>=1;
    59     }
    60     ans.Print();
    61 }
    62 int main()
    63 {
    64     n=read();
    65     printf("%d
    ",(int)(n*0.30103)+1);
    66     q_pow();
    67 }
    View Code
  • 相关阅读:
    转ihone程序内发邮件,发短信,打开链接等
    plist 文件的读写
    转object c语法速成
    转iphone项目之间的引用。
    object c求nsstring 长度和去掉前后空格的方法
    object c runtime中类类型和消息支持检查
    转NSDictionary类使用
    设置UITableview 浮动的 header
    NSString 类型plist转为NSDictionary
    ObjectiveC Unicode 转换成中文
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/8350916.html
Copyright © 2011-2022 走看看