比比谁更大(大数模运算溢出)

#include<bits/stdc++.h>
#define ll long long
using namespace std;

void re(ll a, ll b){
	if(a>b)
	printf("a is the winner!");
	if(a<b)
	printf("b is the winner!");
	if(a==b)
	printf("There is no winner!");
	return;
}

ll ji(int a){
	ll ct1=1;
	ll ct2=a;
	for(int ct3=0; ct3<ct2; ct3++)
	{
		ct1=ct1*a%999068070;//利用乘法分配律的特性将整数抛去,只留下余数,比如:22=2*7+1,那么下次22*23%7的余数实际上就是1*23%7的值,避免了溢出问题
		a--;
		if(ct1==0)//当余数为0时,后边的阶乘将没有意义,所以直接跳出,减少运行时间
		break;
	}
	return ct1;
}
int main(){
	ll a,b;
	cin>>a>>b;
	ll c,d;
	c=ji(a);
	d=ji(b);
	re(c,d);
	return 0;
	
}
链接:https://ac.nowcoder.com/acm/contest/24803/A
来源:牛客网

题目描述

在一个夜黑风高的晚上,牛哥哥吃完心爱的烤串串之后,独自一人漫步在南亭的路上。由于吃的太饱了,牛哥哥决定想一道新生赛的题考(折)验(磨)一下新生,通过脑部的思想风暴促进肚子的消化。

突然间,有两块石头碰瓷了牛哥哥的脚,他气急败坏地捡起来,想要让它们消失在远方。但牛哥哥灵机一动,想要用这两块石头出道题目,以此来显示自己思维之强大。牛哥哥很喜欢竞赛,因为可以一直与别人竞争,因此他也想让两块石头一决高下!

假设两块石头的重量分别为a、b,如果只是简单地比较两者的重量,未免也太简单了。因此,牛哥哥决定计算a!和b!的大小,但因为一个数的阶乘十分之巨大,牛哥哥决定将他们阶乘的结果模一个数再进行比较。此时牛哥哥心中浮现出一个奇妙的模数------999068070,这可是一个很巧妙的模数哦,他心里想。

至此牛哥哥已经完善了他的比较过程,即已知a,b,比较(a!)%999068070和(b!)%999068070的大小,大者则胜出,如相等则打平

作为新手的你们,需要接受牛哥哥的考验,完成比较。

输入描述:

第一行输入两个两个正整数a,b(1≤a,b≤109)a,b(1\le a,b \le10^9)a,b(1a,b109).

输出描述:

如果重量为a的石头胜出,则输出"a is the winner!"
如果重量为b的石头胜出,则输出"b is the winner!"
如果两者打平,则输出"There is no winner!"
注意:不需要输出""



long long最大阶乘20!
int最大阶乘12!
全部评论

相关推荐

07-04 21:23
已编辑
东莞城市学院 后端
秋招和春招只收到几个中大厂的笔试,本人比较菜,感觉大厂的笔试太难,算法题不能全部做出来就没过了,但是CVTE和小天才的感觉不是很难,基本上都做出来了,笔试还是挂了。Boss上投了Java后端开发都没有回音,boss上有面试机会都是C#工控软件开发方向的,但是这个方向不太懂,资料又少,面试的表现有点差,现在还是想看看Java这边,面试的时候比较有把握点。想请教一下,这份简历还有什么问题,一直没什么机会,还有什么地方要修改的。
程序员小白条:学历太差,民办和公办,外包还得区分的,这个学历+这个简历,没的办法,除非你有人脉,太难了,这环境,何况你都毕业了,连一段实习都没,肯定没公司会挑选了,没竞争力,开发才招几个人,跟你竞争的可不是二本,三本的人哦,何况你在二本,三本里面也排名不高
投递小天才等公司7个岗位
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务