我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。

程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。

求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。

测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示

  1. 12 5↵
以文本方式显示

  1. 12 (base 3) = 5 (base 6)↵
1秒 64M 0
测试用例 2 以文本方式显示

  1. 123 456↵
以文本方式显示

  1. 123 is not equal to 456 in any base 2..36↵
1秒 64M 0
测试用例 3 以文本方式显示

  1. 10 A↵
以文本方式显示

  1. 10 (base 10) = A (base 11)↵
1秒 64M 0
测试用例 4 以文本方式显示

  1. 12   456↵
以文本方式显示

  1. 12 is not equal to 456 in any base 2..36↵
1秒 64M 0

分析:因为可能用到A~Z,所以用字符数组来保存输入的数据。   题目的要求是你输入的两个数据在某种进制下可以相等, 再结合用例我们可以想到公式:在某一个进制下,一个数据应为 各个位的数字 × (进制数的位数-1)次方 【sum = a[j] * pow (base,j-1)】,此外每一个数,他合法的最小进制转化应该是各个位最小的数再加1 例如10 最小进制转化为2  A最小进制转化为 11;

这里函数的指针完全可以转化为数组,只是为了好看~

#include <stdio.h>
#include <math.h>
#include <string.h>char a[50], b[50];
int c[50], d[50];
int main() {scanf("%s %s", a, b);void basechange(char *a, int);int startbase(char *x);basechange(a, 1);basechange(b, 2);/*    for (int i = startbase(a); i <= 36; i++) //调试用printf("%d\n", c[i]);printf("\n");for (int i = startbase(b); i <= 36; i++)printf("%d\n", d[i]);*/for (int i = startbase(a); i <= 36; i++) {for (int j = startbase(b); j <= 36; j++) {if (c[i] == d[j]) {printf("%s (base %d) = %s (base %d)\n", a, i, b, j);return 0;         //在这返回0 如果没有结束就意味着不存在}}}printf("%s is not equal to %s in any base 2..36\n", a, b);
}void basechange(char *f, int x) {  //函数一:将一个数所有合法进制转化并存下来int sum = 0;                  //这里由于要对两个数据转化,因此抽象了一个参数x表示哪一个数int startbase(char *x);for (int i = startbase(f); i <= 36; i++) {sum = 0;for (int j = 0; j <= strlen(f) - 1; j++) {char t = f[j];if (t > 60) {t -= 7;}t -= 48;sum += t * pow(i, strlen(f) - 1 - j);}if (x == 1)   //对应参数xc[i] = sum;if (x == 2)d[i] = sum;}}int startbase(char *x) {  //函数2 找最小合法进制转化数int max = *x;for (int i = 0; i <= strlen(x) - 1; i++) {if (max < * (x + i)) {max = *(x + i);}}if (max > 60)max -= 7;max -= '0';max += 1;return max;
}

main函数中只分了三小部分:输入数据,利用函数进行转化,判断是否有解。

if (x>60) x-=7; x-=48或x-='0'   可以将数字和字母都转化为int 类数字(0~9 ASCII码为48~57,A为65,A对应10,理论上应该是58,所以额外减去7)

进制转化(北理乐学编程题目)相关推荐

  1. python数据结构:进制转化探索

    *********************************第一部分*************************************************************** ...

  2. 【PAT - 甲级1010】Radix (25分)(二分,进制转化)

    题干: Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? Th ...

  3. 北理乐学c语言基础答案晕,北理乐学C语言答案.doc

    北理乐学C语言答案.doc 7.入门 计算圆柱的侧面积及体积 include void main double a,b; scanf"lfnlf", printf"s.2 ...

  4. 将最大位1000位的16进制转化位8进制(蓝桥杯)

    用c++实现将最大位1000位的16进制转化成8进制(## 蓝桥杯) 题目 先将16进制转化成二进制在将其转化成八进制 代码如下(示例): ```cpp #include <bits/stdc+ ...

  5. 10进制与26进制转化

    蓝桥杯--进制转换--10进制与26进制转换中的问题 一.问题描述 1.字母编号序列LANQIAO表示的数为多少? 2.2021用字母怎么表示? 二.问题分析 2.1规律解析 2.2 十进制<- ...

  6. 计算机组成原理——基本组成 进制转化 奇偶校验 原码 反码 补码 移码 移位 原码补码乘法除法 IEEE754 加法器ALU

    笔记来源于王道考研视频 第一章 通过电信号传递信息(低电平代表0,高电平代表1) 计算机系统 计算机系统=硬件+软件 软件 系统软件 应用软件 操作系统,数据库管理系统(DBMS),标准程序库(编程时 ...

  7. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL 在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Linu ...

  8. ASP常用进制转化类(2,8,10,16,32,64)

    <% ' 名称:HDOBTools ' 描述:进制转化类 ' 作用:用于各种进转的转化 Class HDOBToolsPrivate hdobHackPrivate Sub Class_Init ...

  9. 进制转化进10进制数

    Option Explicit Private Sub Form_Click() Dim St As Integer, Dem As Long St=InputBox("输入一个十六进制数& ...

  10. 【风马一族_C】进制转化

    1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...

最新文章

  1. 如何解决企业邮件对国外的通信问题
  2. CentOS6.5-源码编译安装最新MySQL5.7.10
  3. 透彻理解Spring事务设计思想之手写实现
  4. 4月份不良与垃圾信息举报:垃圾邮件占37.4%
  5. 资源 | 普通程序员如何自学机器学习
  6. ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
  7. APP时间界面设计模板,可临摹学习的好素材
  8. rpm安装mysql5.6.37_MySQL之—RPM方式安装MySQL5.6 代码实例详解
  9. Thumbnailator java图片压缩,加水印,批量生成缩略图
  10. NVIDIA-cuda-cudnn下载地址
  11. Android之线性布局的4个重要参数
  12. redhat linux ssh服务,Redhat6开启ssh
  13. “九章”量子计算机与智能优化算法
  14. 【谷歌浏览器】国内如何配置谷歌浏览器使用
  15. 微信输入几个字,就能查看好友朋友圈所有动态!你不会不知道吧
  16. 计算机win10搜不到wifi,Windows10笔记本找不到无线网络如何处理
  17. java随机答题器_Advanced Random Auto Clicker免费版下载-多合一随机自动答题器 v4.21 免费版 - 安下载...
  18. FineBI中tomcat服务器部署
  19. 经典!智能车牌识别称重系统解决方案
  20. 计算机编程课程顺序_您可以在2月开始免费在线编程和计算机科学课程

热门文章

  1. 树莓派之Debian游戏(部分)
  2. android手机客户端,【图片】安卓[android]手机客户端版发布【联盟守卫吧】_百度贴吧...
  3. Geohot使用绿雨的BETA4越狱iPhone4 4.1固件详细教程
  4. 如何读取H264文件获得每一帧的数据(VsParserPro)
  5. 网页前端培训笔记(JavaScript事件)
  6. 数据库服务器位置,怎么查看服务器数据库的位置
  7. Android 系统签名实现的三种方式
  8. linux 脚本加密工具下载,linux truecrypt 加密工具
  9. 计算机的病毒防治教案,小学信息技术《防治计算机病毒-计算机病毒》教案
  10. python 比对两个excel表数据_python 如何快速找出两个电子表中数据的差异