文章

47

粉丝

109

获赞

8

访问

29.7k

头像
取模运算 题解:
P5133
发布于2024年3月13日 17:37
阅读数 707

#include<stdio.h>
#include<string.h>
//包括了大数加减法
int pow_mod(int x, int y, int z) {
	int ans = 1;
	x = x % z;//z为mod
	while (y > 0) {
		if (y & 1) {//每次将二进制中,是1的位数给取出来
			ans = (ans * x) % z;//
		}
		x = (x * x) % z;//进行下一位
		y = y >> 1;//往右移一位
	}
	return ans;

}
int mod_string(char x[], int z) {
	int result = 0;//返回的结果
	int base = 1;//用于计算每一位,依次乘10

	//从字符串的末尾开始
	int len = strlen(x);//字符串的位数
	for (int i = len - 1; i >= 0; i--) {
		//将每一为,从小到大加入结果,同时进行取余
		result = (result + (x[i] - '0') * base) % z;
		//进行下一位的计算
		//取模的公式都要取模
		base = (base * 10) % z;
	}
	return result;
}
int main() {
	
	char x[105];
	int y, z;
	while (scanf("%s %d %d", &x, &y, &z) != EOF) {
		int x1 = mod_string(x, z);//将一个大数先进行取模
		printf("%d\n", pow_mod(x1, y, z));
	}
	return 0;
}
根据大佬的题解写的
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发