hdu 2035 反复平方法

#include <cstdio>
#include <stack>
#include <iostream>
using namespace std;
int fun(int a,int b){
	//int c = 0;
	int d = 1;
	stack<int> st;
	while(b){
		st.push(b & 1);
		b >>= 1l;
	}
	while(!st.empty()){
		int t = st.top();
		st.pop();
		//c <<= 1;
		d = d*d %1000;
		if(t == 1){
		//	c ++;
			d = (d*a)%1000;
		}
	}
	return d;
}
int main(){
	int a,b;
	while(cin >> a >> b,a||b){
		cout << fun(a,b) << endl;
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-28 21:04:58

hdu 2035 反复平方法的相关文章

HDU 2297 半平面交

Run Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 640    Accepted Submission(s): 181 Problem Description Since members of Wuhan University ACM Team are lack of exercise, they plan to particip

Constructing Roads In JGShining&#39;s Kingdom(HDU 1025 LIS nlogn方法)

Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 21002    Accepted Submission(s): 5935 Problem Description JGShining's kingdom consists of 2n(n is no mor

矩阵快速幂AC代码HDU 2035

#include <iostream> using namespace std;const int MOD = 1000;//像这样的一个常量就应该专门定义一下 int PowMod(int a, int n)//a^n%MOD { int ret = 1; while(n) { if(n & 1) ret = ret * a % MOD; //变为二进制,然后就可以专门进行分解计算,十分的方便,要求是结合位运算一同使用 a = a * a % MOD; //这里要求特别的注意,因为是

Java数组去掉反复的方法集

经经常使用到,有时候不仅仅是简单的基本类型,那种能够用set集合去重,好多时间用到的是我们自己定义的类型,以下举个样例(我这儿就那int举例了): 方法一. 这样的类似与选择排序算法,首先我们取i值,然后将i之后的全部反复的去掉.详细实现例如以下: import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * 创建时间:2014-11-18 下午3:26:35 * * @author zhangtia

hdu 2035

Ps:查了下快速幂,顺便在这用下.... 积的求余等于两个数的求余的积再求余... 代码: #include "stdio.h"int mod(int a,int b);int main(){ int a,b,n; while(~scanf("%d%d",&a,&b) &&(a||b) ){  printf("%d\n",mod(a,b));  } return 0;}int mod(int a,int b){ i

hdu 2035 人见人爱A^B

人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 34306    Accepted Submission(s): 23290 Problem Description 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A

hdu 2035 快速幂

很显然是快速幂,数据太小了,int就足够. 1 #include <iostream> 2 using namespace std; 3 4 int pow_mod( int a, int n, int m ) 5 { 6 int ans = 1; 7 a = a % m; 8 while ( n ) 9 { 10 if ( n & 1 ) 11 { 12 ans = ans * a % m; 13 } 14 a = a * a % m; 15 n = n >> 1; 16

hdu 2035 人见人爱A^B (java)

问题: 此题需要用到大数来储存,但int还是能装下输入的n,m所以并没必要用BigInteger来装. 在开始用BigInteger装n时,即使将0转化成BigInteger型,用于判断0的if语句并没有效果,原因不明. 一些用于处理大数的函数: Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger b=BigInteger.valueOf(a); 则b=3; String s="12345"; BigIntege

HDU 2035 不忍直视的水

#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF){ if(!a&&!b) break; int ans=1; for(int i=1;i<=b;i++) ans=(ans*a)%1000; print