码迷,mamicode.com
首页 > 其他好文 > 详细

HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)

时间:2017-12-17 18:12:00      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:printf   print   math   scan   100%   str   std   编程   span   

时间限制: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;
}

 

HihoCoder1663双阶乘的末尾数字([Offer收割]编程练习赛40)(暴力||数学)

标签:printf   print   math   scan   100%   str   std   编程   span   

原文地址:http://www.cnblogs.com/hua-dong/p/8052494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!