其他分享
首页 > 其他分享> > E - 后四位

E - 后四位

作者:互联网

#include<bits/stdc++.h>
using namespace std;
long long n,a[1000001],t,cnt,x,y;





int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
cin>>t;
for (int p=1;p<=t;p++){
	cin>>x>>y;
	memset(a,0,sizeof(a));
	cnt=0;
	while(y!=0)
	{
		cnt++;
		a[cnt]=y%2;
		y=y/2;
		}
	//b 化为 2阶
long long ans=1,tmp=1;
x%=10000; 
tmp=x;
	for (int i=1;i<=cnt;i++)
	{
		if (a[i]!=0)
		 ans*=tmp;
		tmp=tmp%10000;
		ans=ans%10000;	
		tmp*=tmp;
	}	
if (ans>=1000)	
cout<<ans<<endl;
else if (ans>=100)
cout<<"0"<<ans<<endl;
else if (ans>=10)
cout<<"00"<<ans<<endl;
else cout<<"000"<<ans<<endl;			
}

return 0;

}

  

很遗憾,我不会在前位补0,

不过还好。我现场学了一发。

对于某个数的大数的平方。两个数都很大很大。

那么,就把指数二进制化。%2 进栈 /2直到为0为止。

再从后往前乘。

做法如下

假如指数是21

(10101)2

倒过来是

10101(<-真巧

假如底数是n

答案就是:

2的0次方(1)乘以底数……(A)

2的2次方(4)乘以底数……(B)

2的4次方(16)乘以底数……(C)

A*B*C;

即可

而B是A*2*2得出的,C是B*2*2得出的。 也就是说,在循环的不同时段里,ABCD……可以用一个tmp来存

所以A式到C式求解只需要走一次。(往后滚一边)

在滚的过程中,将我们的sum顺便乘以下tmp。

やったぜ!

 

标签:tmp,cnt,cout,int,底数,long,四位
来源: https://www.cnblogs.com/asanagiyantia/p/11679851.html