HDU-1097,A hard puzzle(快速幂)

問題の説明:

LCYはfeng5166、LWG、JGShiningとイグナチオにハードパズルを与える:LCYが始まるよりも、問題が簡単になりますので、このBTの問題にA ^ b.everybodyオブジェクトを知っているか、与えたと、b。
彼らは賢いが誰であるか、あなたに送金ようnumber.Butの誰もが、この問題をsloveする怠け者である、A ^ Bの最後の数字を知っていると、b、どのように与えた:このパズルは、ことが記載されています。 

入力: 

みとめのテストケースがあります。各テストケースは二つの数aとb(0 <a、B <= 2 ^ 30)で構成され 

出力: 

各テストケースのために、あなたは出力A ^ Bの最後の桁の数字をすべきです。 

サンプル入力: 

7 66

8 800 

サンプル出力:

9

 問題解決のアイデア:

この質問は、B乗の最後の桁を求めている、典型的な高速電力、それが最後の要件であるため、非常に高速な力を加える前に、我々は、元の1桁の数字を取った後、操作を再することができ、なぜなら最後の数字は常に10%で桁、ある決めました。 

プログラムコード: 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int quickmul(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1)
			ans=(ans*a)%10;
		a=(a*a)%10;
		b>>=1;
	}
	return ans%10;
}
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		cout<<quickmul(n%10,m)<<endl;//关键n%10
	}
	return 0;
}

 

发布了274 篇原创文章 · 获赞 282 · 访问量 2万+

おすすめ

転載: blog.csdn.net/weixin_43823808/article/details/104075568