给你一个大数n,求2的n次幂;
由于n很大,用普通的快速幂已经不能够很快的算出了,因为不好判断奇偶以及除2这些,不过不过用十进制快速幂求普通的ll及int型数也很快;
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e4+5; int mod=1e9+7; ll qpow(ll a,ll b) { if(b==0) return 1; ll ans=1; while(b) { if(b&1) ans=(ans*a)%mod; a=a*a%mod; b>>=1; } return ans%mod; } int main() { char arr[maxn]; ll bit[20]; bit[0]=1; for(int i=1; i<10; i++) { bit[i]=bit[i-1]*2; } scanf("%s",arr); int len=strlen(arr); ll ans=1; for(int i=0; i<len; i++) { ans=qpow(ans,10)%mod; ans=ans*bit[arr[i]-‘0‘]%mod; } printf("%lld\n",(ans+mod)%mod); return 0; }
原文地址:https://www.cnblogs.com/lengsong/p/11290832.html
时间: 2024-10-10 04:40:56