PTA甲级-1010 Radix c++

news2024/9/23 13:28:29

文章目录

      • Input Specification:
      • Output Specification:
      • Sample Input 1:
      • Sample Output 1:
      • Sample Input 2:
      • Sample Output 2:
  • 一、题干大意![在这里插入图片描述](https://img-blog.csdnimg.cn/68d84d3ea86e4aaab002152ae8472e05.png#pic_center)
  • 二、题解要点
  • 三、具体实现
  • 总结

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is yes, if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N1 and N2, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:

N1 N2 tag radix

Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set { 0-9, a-z } where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number radix is the radix of N1 if tag is 1, or of N2 if tag is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print Impossible. If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10

Sample Output 1:

2

Sample Input 2:

1 ab 1 2

Sample Output 2:

Impossible

一、题干大意在这里插入图片描述

给出两个字符串和其中一个字符串的进制,求出另一个字符串的进制,使两者的值相等。最后输出求出的进制,如果不存在这种进制就输出 “Impossible”

二、题解要点

  • 两个函数,一个用来进行进制转化,也就是把任意进制的字符串转化为十进制的数。另一个用二分法求出进制。
  • 一定要注意:在二分法求进制的过程中,求出的进制是有可能上溢的,如果不解决就只能拿15分。

三、具体实现

/**
*@Author:hhzheng
*@Date:2023/2/6  10:58
*@Filename:PAT甲级1010 Radix
*/

#include<iostream>
#include <string>
#include <cmath>
#include <cctype>
#include <algorithm>
using namespace std;

/**
 * 输入一个字符串、一个数(表示进制) 将这个字符串转换为该十进制的数
 * @param n
 * @param radix
 * @return
 */
long long turnDecimal(string n, long long radix) {
    long long theResult = 0;
    for (int i = n.size() - 1; i >= 0; --i) {
        if (n.at(i) >= '0' && n.at(i) <= '9') {
            theResult += (n.at(i) - '0') * pow(radix, n.size() - i - 1);
        }
        if (n.at(i) >= 'a' && n.at(i) <= 'z') {
            theResult += (n.at(i) - 'a' + 10) * pow(radix, n.size() - i - 1);
        }
    }
    return theResult;
}

/**
 * 用二分法求出正确的进制 如果不存在返回-1
 * @param n
 * @param s
 * @return
 */
long long getRadix(long long n, string s) {
    char it = *max_element(s.begin(), s.end());
    long long low = (isdigit(it) ? it - '0': it - 'a' + 10) + 1; //找到可能的最小的进制
    long long high = max(n, low); //找到最大的可能的进制,比如说 1 1 1 10 这种情况就不能high = n了
    while (low <= high) {
        long long mid = (low + high) / 2;
        long long temp = turnDecimal(s, mid);
        if (temp < 0 ||temp > n) {  //一定要有temp < 0,因为在进制转化的时候有可能会上溢
            high = mid - 1;
        } else if (temp == n) {
            return mid;
        } else {
            low = mid + 1;
        }
    }
    return -1;
}

int main() {
    string n1, n2;
    long long number1, number2, radix,answerRadix;
    int tag;
    cin >> n1 >> n2 >> tag >> radix;
    if (tag == 1) {
        number1 = turnDecimal(n1, radix);
        answerRadix = getRadix(number1,n2);
    } else {
        number2 = turnDecimal(n2, radix);
        answerRadix = getRadix(number2,n1);
    }
    if (answerRadix != -1){
        cout << answerRadix;
    }else{
        cout <<"Impossible";
    }
    return 0;
}


总结

全网的写法思路基本差不多,决定成败的就是在如何这个进制的上溢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案

前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点&#xff0c;有同学在后台提问&#xff1a; “做完前期的调研和准备工作&#xff0c;领导要求写一个落地方案并评审&#xff0c;自动化测试的落地方案该怎么写”&#xff1f; 首先这个要求我觉得挺正常&a…

2023.02.12 学习周报

文章目录摘要文献阅读1.题目2.摘要3.介绍4.本文贡献5.相关工作5.1 Temporal Recommendation5.2 Sequential Recommendation6.方法6.1 Problem Formulation6.2 Input Embedding6.3 Self-Attention Structure6.4 Model Training7.实验7.1 数据集7.2 实验结果7.3 多时间嵌入的效果…

Vulkan教程(12): Graphics pipeline Introduction (图形管线概要)

Vulkan官方英文原文&#xff1a;https://vulkan-tutorial.com/Drawing_a_triangle/Graphics_pipeline_basics/Introduction对应的Vulkan技术规格说明书版本&#xff1a; Vulkan 1.3.2Over the course of the next few chapters, well be setting up a graphics pipeline that i…

你知道MySQL中like 关键字也能用索引嘛?

上篇文章中&#xff0c;我和大家分享了索引的两个使用规则&#xff1a; 索引上不要使用函数运算。使用覆盖索引避免回表。 当然&#xff0c;凡事有个度&#xff0c;用哪一种策略也要结合具体的项目来定&#xff0c;不能为了 SQL 优化而抛弃了业务。 在前文的基础上&#xff0…

Mac安装Homebrew排坑大全..

官网&#xff1a;https://brew.sh/BACKGROUND: 安装Homebrew嘎嘎报错&#xff01;question one网络不通&#xff0c;需要配置一下github.com的hostError&#xff1a;fatal: unable to access https://github.com/Homebrew/homebrew-core/: error:02FFF036:system library:func(…

电子电气架构——基于CANoe实现两路CAN线间网关仿真

基于CANoe实现两路CAN线间网关仿真 魔都的天气也很魔性,白天酷热无比,现在晚上九点又狂风大作,凉爽宜人。 天气的不可预见性与个人生活极其相似,都有随机、不可控的成分,自己能做的就是不懊悔昨天已发生,不寄托于未来未发生,只想过好当下这时光。 老规矩,分享一段喜…

【不知道是啥】浅保存哈

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

Linux系统安全之iptables防火墙

目录 一.iptables防火墙基本介绍 二.iptables的四表五链 三.iptables的配置 1.iptables的安装 2.iptables防火墙的配置方法 四.添加、查看、删除规则 1.查看(fliter)表中的所有链 iptables -L 2.使用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.清空表中所…

算法刷题打卡第88天:字母板上的路径

字母板上的路径 难度&#xff1a;中等 我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "…

【Java|golang】1138. 字母板上的路径

我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]&#xff0c;如下所示。 我们可以按下面的指令规则行动&#xff1a; 如果方格存…

【计组】理解Disruptor--《计算机组成原理》(十五)

Disruptor 的开发语言&#xff0c;并不是很多人心目中最容易做到性能极限的 C/C&#xff0c;而是性能受限于 JVM 的 Java。其实只要通晓硬件层面的原理&#xff0c;即使是像 Java 这样的高级语言&#xff0c;也能够把 CPU 的性能发挥到极限。 一、Padding Cache Line&#xff…

mysql中mvcc实现机制和原理

目录 1.什么是mvcc? 2.mvcc中的快照读和当前读有什么区别和联系&#xff1f; 3.mvcc的作用是什么&#xff1f; 4.mvcc的实现机制和原理是什么&#xff1f; 1.什么是mvcc? mvcc全称是(Multi-Version Concurrency Control) 多版本并发控制,是数据库管理过程中的一种并发控制…

keras+IMDB情感分析

目录简介IDMB数据集数据预处理数据加载数据清洗保存经过清洗后的数据训练测试数据集分割文字编码词嵌入模型构建模型训练训练效果模型评分模型预测及混淆矩阵查看F1 Score、召回率等信息预测新的影评总结本博客参考&#xff1a; 【python自然语言处理 周元哲著】 【keras中文文…

数据库索引篇(二叉树/B-Tree)对比结构讲解

我们可以先看一下 二叉树的一个结构 简单将数据分成左右两侧 左侧小于36 右侧大于36 在下面再以这种方式继续划分 但二叉树的结构就有一个非常大的弊端 如果我们后续插入的数据全部小于 或 大于36 他就会 变成这样 一个链表 查询效率大大降低 因为 比如 你想找什么数据 都会…

岁月闲思——时间给我地思考

岁月闲思——时间给我地思考 2022年6月10日&#xff0c;明天又一个周末&#xff0c;成人地时间总是让人感觉一天很慢&#xff0c;一周以及一年反而很快。 下班到家&#xff0c;吃过长辈做的手工凉皮&#xff0c;得空坐在电脑面前敲击点文字&#xff0c;记录下时间留给自己地印…

Docker--consul

目录 前言 一、Consul 简介 1.1、 consul 概述 1.2 、consul 的两种模式 1.3、consul 提供的一些关键特性 二、Consul 容器服务更新与发现 三、consul 部署 3.2、查看集群信息 四、registrator服务器 consul-template 五、consul 多节点 前言 服务注册与发现是微服…

软件测试面试十大必考题目(通用)

目录 &#xff08;1&#xff09; 为什么想进本公司&#xff1f; &#xff08;2&#xff09; 喜欢这份工作的哪一点&#xff1f; &#xff08;3&#xff09; 自己的优缺点为何&#xff1f; &#xff08;4&#xff09; 对公司的了解有多少&#xff1f; &#xff08;5&#xf…

C++创建多线程的方法总结

下个迭代有个任务很有趣&#xff0c;用大量的线程去访问一个接口&#xff0c;直至其崩溃为止&#xff0c;这就需要多线程的知识&#xff0c;这也不是什么难事&#xff0c;总结一下C中的多线程方法&#xff1a;std、boost、pthread、windows api。 目录 一、多线程预备知识 二…

图解浏览器渲染页面详细过程

渲染详细过程 产生渲染任务&#xff0c;开启渲染流程 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0c;开启渲染流程。…

IDEA 常用快捷键回顾

一 Alt 数字键 1. Alt 1: 打开项目 2. Alt 2: 打开Favorites 3. Alt 3: 打开Find 4. Alt 4: 打开Run 5. Alt 5: 打开Debug 6. Alt 6: 打开当前所在文件 7. Alt 7: 打开Structure 8. Alt 8: 打开Services 9. Alt 9: 打开Git日志 二 Ctrl 其他键 1. Ctrl…