陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物数学/k进制下x^n的位数/log

Posted Roni

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物数学/k进制下x^n的位数/log相关的知识,希望对你有一定的参考价值。

链接:https://www.nowcoder.com/acm/contest/121/F
来源:牛客网

题目描述

 

WWX的女朋友送给了他一个礼物,可是礼物却被一把K进制密码锁锁住了。在礼物盒上还有一张出自她的女朋友的纸条:”嘿嘿~~密码我会在520那天告诉你”。但是WWX想提前知道礼物是什么,所以找到了这把锁的制造者Ddjing。Ddjing告诉他,我只知道这把锁的加密原理:在锁的表面会定期显示两个十进制数x和n,如果你能在有限时间算出来将n个x相乘的结果,其用k进制表示时的长度就是这把锁的密码。于是他又找到了号称“人体计算机”的黑猫,黑猫在键盘上疯狂操作了一波后,告诉他这道题可能要对double取整,想要知道具体方法,就要和他进行py交易,为了保住WWX的清白,你能帮帮他么?

输入描述:

第一行是一个整数T(1<=T<=500),表示有T组数据.
接下来的T行,每行依次输入三个十进制整数
x(2<=x<=1e+3),n(2<=n<=1e+3),k(2<=k<=30),以空格间隔。

输出描述:

对于每组输入数据,首先输出一个"Case ",然后依次输出它的组号、”: ”和礼物盒的密码。
每个”Case”和每个”:”后均有一个空格。
示例1

输入

3
8 635 2
2 100 3
10 1000 10

输出

Case 1: 1906
Case 2: 64
Case 3: 1001
示例2

输入

1
1000 1000 2

输出

Case 1: 9966

备注:

1.
在对一个double型的浮点数进行向下取整时,可使用如下操作。
const double EPS = 1e-8;
double a=1234.56;
int x=long int(a+EPS);

【分析】:

10进制数字x的位数:(int)(log10(x))+1

k进制数字x的位数:(int)(logk(x)) +1

k进制数字x^n的位数:(int)(logk(x^n)) +1 = (int) ( n * logk(x) + 1 )  = (int) (n * log10(x) / log10(k) ) +  1

用到了log的一些性质和换底公式。

【代码】:

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

#define EPS 1e-8
int main()
{
    int t,x,n,k,ca=1;
    cin>>t;
    while(t--)
    {
        cin>>x>>n>>k;
        int ans = (int) (n*log10(x)/log10(k) + EPS);
        printf("Case %d: %d\n",ca++,ans+1);
    }
    return 0;
}

 

以上是关于陕西师范大学第七届程序设计竞赛网络同步赛 F WWX的礼物数学/k进制下x^n的位数/log的主要内容,如果未能解决你的问题,请参考以下文章

陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟数论/法拉数列/欧拉函数

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)D - 数圈圈

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)A - 所有情况的和

牛客网 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-低年级组)求最大值

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)C - 小明打联盟

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)B - 幸运大奖