链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
在一个夜黑风高的晚上,牛哥哥吃完心爱的烤串串之后,独自一人漫步在南亭的路上。由于吃的太饱了,牛哥哥决定想一道新生赛的题考(折)验(磨)一下新生,通过脑部的思想风暴促进肚子的消化。
突然间,有两块石头碰瓷了牛哥哥的脚,他气急败坏地捡起来,想要让它们消失在远方。但牛哥哥灵机一动,想要用这两块石头出道题目,以此来显示自己思维之强大。牛哥哥很喜欢竞赛,因为可以一直与别人竞争,因此他也想让两块石头一决高下!
假设两块石头的重量分别为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(1≤a,b≤109).
输出描述:
如果重量为a的石头胜出,则输出"a is the winner!" 如果重量为b的石头胜出,则输出"b is the winner!" 如果两者打平,则输出"There is no winner!" 注意:不需要输出""
示例1
输入
2 1
输出
a is the winner!
示例2
输入
1 2
输出
b is the winner!
示例3
输入
2 2
输出
There is no winner!
示例4
输入
23 22
输出
b is the winner!
备注:
N的阶乘(记作 N!)是指从1到N(包括1和N)的所有整数的乘积。
取余运算符 (%),一个表达式的值除以另一个表达式的值,返回求余结果。求余是一种数学计算方法,指一个数除以另一个数,不够除的部分就是余数,就是求余的结果。
例如5%3=2
(22!)%999068070=785674890
(23!)%999068070=87297210
思路: 首先得知道 999068070=2x3x5x7x11x13x17x19x103 不懂的,重新用心做下这题
接下来就是一顿%%%%%%%%%%%%%的操作了
解:
当a与b中只要出现了一个大于等于103的数,就能直接判断大小
if (a >= 103 || b >= 103) {
if (a >= 103 && b >= 103)
printf("There is no winner!");
if (a >= 103 && b < 103)
printf("b is the winner!");
if (a < 103 && b >= 103)
printf("a is the winner!");
}
如果a和b小于103 那只需要循环算一下就好了(大佬原话)
int res = 1;
for (int i = 1; i <= n; i++)
res = res * i % mod;//这里通过边阶乘边取模,可以省去个long long
后面,源代码贴上
#include <bits/stdc++.h>
using namespace std;
int a, b;
const int mod = 999068070;//习惯问题
int zs(int z) {
int res = 1;
for (int i = 1; i <= z; i++)
res = res * i % mod;
return res;
}
int main() {
scanf("%d%d", &a, &b);
if (a >= 103 || b >= 103) {
if (a >= 103 && b >= 103)
printf("There is no winner!");
if (a >= 103 && b < 103)
printf("b is the winner!");
if (a < 103 && b >= 103)
printf("a is the winner!");
} else {
a = zs(a);
b = zs(b);
if (a > b)
printf("a is the winner!");
else if (a < b)
printf("b is the winner!");
else if (a == b)
printf("There is no winner!");
}
}