HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定正整数x和k,判断是否存在正整数1 ≤ y ≤ x使得x与y同奇偶且(x!!)/(y!!)的个位数字为k。
其中x!! = x × (x-2) × …。
如果存在这样的y,你需要输出最大的一个,如果不存在这样的y,你需要输出-1。
输入
第一行一个正整数T,表示组数。
接下来T行,每行两个正整数x和k。
对于30%的数据1 ≤ T ≤ 3, 1 ≤ x ≤ 30, 0 ≤ k ≤ 9
对于70%的数据1 ≤ T ≤ 100, 1 ≤ x ≤ 1000, 0 ≤ k ≤ 9
对于100%的数据1 ≤ T ≤ 1000, 1 ≤ x ≤ 1000000000000000000, 0 ≤ k ≤ 9
输出
对于每组数据,输出一个整数表示答案。
- 样例输入
-
2 3 1 7 6
- 样例输出
-
3 -1
#include<iostream> #include<cstdio> #include<cstring> #include<ctime> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int main() { long long ans,a,b,i,j,T,x,k,cnt; bool flag; scanf("%lld",&T); while(T--){ scanf("%lld%lld",&x,&k); if(k==1) { printf("%lld\n",x); continue; } ans=1;flag=false;cnt=0; for(i=x;i>0;i-=2){ cnt++; if(cnt>100) break; if(ans==k) { printf("%lld\n",i);flag=true; break; } ans=ans*i%10; } if(!flag) printf("-1\n"); } return 0; }
It is your time to fight!