工号不够用了怎么办

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


import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String in = scan.nextLine();
        String[] input = in.split("\\s+");
        long peopleNum = Long.parseLong(input[0]);//需要分配的人数
        int charSize = Integer.parseInt(input[1]);//新工号英文字母的长度
        double num1 = Math.pow(26,(double)charSize);
        int i = 1;
        long num2 = (long)num1 * 10;
        while(num2 < peopleNum){
            i ++;
            num2 *= 10;
        }
        System.out.println(i);
    }
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    ll x,y;
    cin>>x>>y;
    ll sum=1;
    while(y--)sum*=26;
    if(sum>=x)cout<<1<<endl;
    else{
        int co=0;
        while(sum<x){
            sum*=10;
            co++;
        }
        cout<<co<<endl;
    }
}

#include <cmath>
#include<iostream>

using namespace std;

int res(long x, int y) {
    long res, cnt = -1;
    res = ceil(x / pow(26, y));
    for (;res - pow(10, cnt) > 0;cnt++);
    return (cnt <= 0 ? 1 : cnt);

}

int main() {
    long x;
    int y;

    cin >> x >> y;
    cout << res(x, y);

    return 0;
}
def solve(x, y)
  z = 1
  base = 26 ** y
  factor = 10
  while true
    if base * factor >= x
      puts z
      return
    end
    z += 1
    factor *= 10
  end
end

while line = STDIN.gets
  x, y = line.split(' ').collect(&:to_i)
  solve(x, y)
end
// ruby




全部评论

相关推荐

谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
昨天 17:59
已编辑
长江大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务