【蓝桥杯刷题】坑爹的负进制转换

简介: 【蓝桥杯刷题】坑爹的负进制转换

💡前言🌞:


大伙们好!😄又到了小陈蓝桥杯每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用C语言实现——坑爹的负进制转换,这个题目对我来说很有挑战性,把我折磨的很难受,不过我还是整出来了,我现在迫不及待地要和大家分享~!😄🤗🤗


💛坑爹的负进制转换题目💛


💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡


题目描述


以前我们做的进制转换大家都忽略了一点,就是进制一定是正整数;今天这道进制转换就坑爹的选择了,额,负整数来做进制。


输入描述


输入由若干行组成,每行有两个整数n(-32765<=n<=32767)和R(-16<=R<=-2)。输入的最后一行只有一个‘#’号,表示输入结束。


输出描述


对于每个输入行,输出n的R进制形式。出现的字母请用大写字母表示!


样例输入


30000 -2

-20000 -2

28800 -16

-25000 -16

#

样例输出


11011010101110000

1111011000100000

19180

7FB8


💪 解题思路的分享💪  


我们采用递归的写法来写这道题目。

首先我们要知道,在C语言中,商和余数都符合 被除数=商x除数+余数 这一数学规律。C/C++ 是向零取整(负数向上、正数向下取整)的。也就是说,余数可能是负数。

我们要打印出对应的负二进制,就不能有负数,所以代码中如果余数为负数,要将其变为正数。

说道递归,那就必须要有出口,我们将a==0作为递归出口,当a不停除以对应进制到零,此时递归停止。

当余数小于零时,我们该如何将其变为正数呢?例如-5/-2=2余-1,这个-1没有办法处理。

我们不能改变结果的值,那就需要一个看起来很简单但是想不到的转换公式:

(商+1)*除数+(余数-除数)=商*除数+除数+余数-除数=商*除数+余数=被除数

所以我们要保证商不变的话只要  被除数=被除数+除数,化简一下可以得到商=被除数/除数--->(被除数+除数)/除数=商+1  。

为了实现多组输入,用scanf返回值来判断输入是否正确。


😊题目源码的分享😊


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void JinZhi(int a, int b)
{
  if (a == 0)
  return;//递归的出口
  int m = a % b;
  if (m < 0)
  {
  m -= b; a += b;
  }
  if (m > 10)
  {
  m = m - 10 + 'A';//转化成字符型,方便16进制输出成字符
  }
  else
  {
  m += '0';
  }
  JinZhi(a / b, b);
  printf("%c", m);//注意顺序,不要写到函数的前面,不然就反了
}
int main()
{
  int n[10], m[10],i=0;
  int a, b;
  while (scanf("%d%d", &a, &b) == 2)//用scanf返回值来判断输入是否正确
  {
  n[i] = a;
  m[i] = b;
  i++;
  }
  for (int j = 0; j < i; j++)
  {
  JinZhi(n[j], m[j]);
  printf("\n");
  }
  return 0;
}

👉 本菜鸡&总结 👈


这是我们学校蓝桥杯选拔赛上面的题目,我觉得很有挑战性写了这篇博客,这种题目比较耐人寻味,哪位大佬有更好的做法,请在评论区不吝赐教哦~😀如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!🌞🌞🌞

5658fa76c1c90a4013f39dbb414b806f_1a8d32135edbdcac9a664aac3d8c43e9.gif


相关文章
|
C语言
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
【C语言】【典例详解】【刷题】猜名次&&猜凶手【循环练习】
213 0
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
329 0
|
10月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
74 0
力扣 C++|一题多解之动态规划专题(1)
|
10月前
|
C++ 算法 存储
力扣 C++|一题多解之动态规划专题(2)
力扣 C++|一题多解之动态规划专题(2)
103 0
力扣 C++|一题多解之动态规划专题(2)
|
10月前
|
算法 Java
刷题专栏(二十五):有效的完全平方数
刷题专栏(二十五):有效的完全平方数
213 2
《蓝桥杯每日一题》双指针·AcWing 3768. 字符串删减
《蓝桥杯每日一题》双指针·AcWing 3768. 字符串删减
70 0
|
C语言
C语言经典问题—猜名次、猜凶手和杨辉三角
C语言经典问题—猜名次、猜凶手和杨辉三角
86 0
|
存储 算法
蓝桥杯 真题:明码 一题掌握3种码
蓝桥杯 真题:明码 一题掌握3种码
151 0
蓝桥杯 真题:明码 一题掌握3种码
【力扣·每日一题】372. 超级次方(欧拉降幂 快速幂)
【力扣·每日一题】372. 超级次方(欧拉降幂 快速幂)
110 0
【力扣·每日一题】372. 超级次方(欧拉降幂 快速幂)
【力扣】二进制求和 这道题真的好烧脑哇
【力扣】二进制求和 这道题真的好烧脑哇
123 0
【力扣】二进制求和 这道题真的好烧脑哇