给出a的k次方,求其结果的前m位,和后n位。
利用快速幂的思想:
例如:求2的60次方的前十位和后十位。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
#define mod 10000000000
long long fpow(long long a,long long b)//
{
double ans=1,base=a;
while(b)
{
//printf("%lld %lf %lf>>>>\n",b,base,ans);
if(b&1)
ans=ans*base;
while(ans>=mod*1.0)//
ans=ans/10.0;
base=base*base;
while(base>=mod*1.0)//
base=base/10.0;
b>>=1;
}
return (long long) ans;
}
long long fpow1(long long a,long long b)//前十位
{
long long res=1;
while(b)
{
if(b&1)
res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
long long n;
while(~scanf("%lld",&n))
{
printf("%lld\n",fpow(2,n));
printf("%010lld\n",fpow1(2,n));
}
return 0;
}