> 文章列表 > 【华为OD机试真题 C++】1066 - 新工号中数字的最短长度 | 机试题+算法思路+考点+代码解析

【华为OD机试真题 C++】1066 - 新工号中数字的最短长度 | 机试题+算法思路+考点+代码解析

【华为OD机试真题 C++】1066 - 新工号中数字的最短长度 | 机试题+算法思路+考点+代码解析

文章目录

    • 一、题目
      • 🔸题目描述
      • 🔸输入输出
      • 🔸样例1
      • 🔸样例2
      • 🔸样例3
    • 二、代码参考
  • 作者:KJ.JK

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
 
🍂个人博客首页: KJ.JK
 
💖系列专栏:华为OD机试真题(C++)


一、题目


🔸题目描述

3020年, 空间通信集团的员工人数突破20亿人,即将遇到现有工号不够用的窘境。
 
现在,请你负责调研新工号系统。继承历史传统,新的工号系统由小写英文字母(a-z) 和数字(0-9) 两部分构成。
 
新工号由一段英文字母开头,之后跟随一 段数字,比如"aaahw0001",“a12345”,“abcd1”,“a00”。
 
注意新工号不能全为字母或者数字,允许数字部分有前导0或者全为0。
 
但是过长的工号会增加同事们的记忆成本,现在给出新工号至少需要分配的人数X和新工号中字母的长度Y,求新工号中数字的最短长度Z。


🔸输入输出

输入
一行两个负整数X Y ,数字单个空格分隔
0<X <=2^50- 1
0<Y<=5
 
输出
输出新工号中数字的最短长度Z


🔸样例1

输入
260 1输出
1说明:
无

🔸样例2

输入
26输出
1说明:
数字长度不能为0

🔸样例3

输入
2600 1输出
2说明:
无

二、代码参考

#include <iostream>
#include <cmath>
using namespace std;int main() {long long num_people, len_letter;cin >> num_people >> len_letter;long long min_len_num = max(1LL, (long long) ceil(log10(num_people / pow(26, len_letter))));cout << min_len_num << endl;return 0;
}

作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习