版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、快速幂(乘法实现)
eg : 2^7 (2的7次方)
7 的二进制数为 111
2^1 = 2 ;
2^2 = 2^1 * 2^1
2^4 = 2^2 * 2^2
2^7 = 2^4 * 2^2 * 2^1
#include<stdio.h>
long long Fast_power(long long a,long long b)
{
long long ans=1, base=a ;
while(b!=0)
{
if(b&1!=0)//取b的二进制数最后一位
ans = ans * base ;
base = base * base ;
b>>=1 ;// b的二进制左移一位 等价于 b除以2
}
return ans ;
}
int main()
{
long long a = 2 ;
long long b = 10 ;
printf("%lld",Fast_power(a,b)) ;
}
2、快速乘(加法实现)
eg: 2*7
7 的二进制数为 111
2*1 = 1
2*2 = 2*1 + 2*1
2*4 = 2*2 + 2*2
2*7 = 2*4 + 2*2 + 2*1
#include<stdio.h>
typedef long long ll ;
long long cheng(ll a,ll b)
{
ll res = 0 ;
while(b!=0)
{
if(b&1)
res = res+a ;
a = a + a;
b>>=1 ;
}
return res ;
}
int main()
{
ll a ;
ll b ;
scanf("%lld%lld",&a,&b) ;
printf("%lld",cheng(a,b)) ;
return 0 ;
}