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

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

💡前言🌞:


大伙们好!😄又到了小陈蓝桥杯每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用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


相关文章
|
6月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
6月前
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
【一刷《剑指Offer》】面试题 10:二进制中 1 的个数
|
6月前
|
算法
【一刷《剑指Offer》】面试题 11:数值的整数次方
【一刷《剑指Offer》】面试题 11:数值的整数次方
|
C语言 C++
C语言刷题系列——7.(洛谷)上学迟到
C语言刷题系列——7.(洛谷)上学迟到
282 0
|
6月前
|
机器学习/深度学习
蓝桥杯-2/14天-完全平方数【另类思路】
蓝桥杯-2/14天-完全平方数【另类思路】
|
测试技术
【寒假每日一题】AcWing 4653. 数位排序(补)
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 关于pair
97 0
华为机试每日一练--第八题: 取近似值
华为机试每日一练--第八题: 取近似值
华为机试每日一练--第八题: 取近似值
|
C语言
下面【整型提升】的例题,你会几道?学完这一课,你将真正拿捏整型提升问题
下面【整型提升】的例题,你会几道?学完这一课,你将真正拿捏整型提升问题
138 0
下面【整型提升】的例题,你会几道?学完这一课,你将真正拿捏整型提升问题
蓝桥杯国赛 小数第n位(数论)
蓝桥杯国赛 小数第n位(数论)
蓝桥杯国赛 小数第n位(数论)