淘宝联盟手机网站建设,互联网电商,网站自动秒收录工具,桂林北站到两江机场大巴时刻表【蓝桥杯刷题】——坑爹的负进制转换#x1f60e;#x1f60e;#x1f60e;
目录
#x1f4a1;前言#x1f31e;#xff1a; #x1f49b;坑爹的负进制转换题目#x1f49b;
#x1f4aa; 解题思路的分享#x1f4aa; #x1f60a;题目源码的分享#x1f6…【蓝桥杯刷题】——坑爹的负进制转换
目录
前言 坑爹的负进制转换题目 解题思路的分享 题目源码的分享 本菜鸡总结 博客昵称陈大大陈 座右铭所谓觉悟就是在漆黑的荒野上开辟出一条理当前进的光明大道。 博主简介一名热爱C/C和算法等技术喜欢运动爱胡思乱想却胸怀大志的小博主 博主唠嗑早中晚安各位CSDN的朋友我是博客新人陈大大陈希望我的文章能为你带来帮助欢迎大家在评论区畅所欲言也希望大家多多为我提出您宝贵的建议如果觉得我写的不错的话还请点个赞和关注哦~ 前言 大伙们好又到了小陈蓝桥杯每日一题的时间了~ 今天也带来了十分有趣的题目用C语言实现——坑爹的负进制转换这个题目对我来说很有挑战性把我折磨的很难受不过我还是整出来了我现在迫不及待地要和大家分享~ 坑爹的负进制转换题目 题目描述 以前我们做的进制转换大家都忽略了一点就是进制一定是正整数今天这道进制转换就坑爹的选择了额负整数来做进制。 输入描述 输入由若干行组成每行有两个整数n-32765n32767和R-16R-2。输入的最后一行只有一个‘#’号表示输入结束。 输出描述 对于每个输入行输出n的R进制形式。出现的字母请用大写字母表示 样例输入 30000 -2
-20000 -2
28800 -16
-25000 -16
# 样例输出 11011010101110000
1111011000100000
19180
7FB8解题思路的分享 我们采用递归的写法来写这道题目。首先我们要知道在C语言中商和余数都符合 被除数商x除数余数 这一数学规律。C/C 是向零取整负数向上、正数向下取整的。也就是说余数可能是负数。我们要打印出对应的负二进制就不能有负数所以代码中如果余数为负数要将其变为正数。说道递归那就必须要有出口我们将a0作为递归出口当a不停除以对应进制到零此时递归停止。当余数小于零时我们该如何将其变为正数呢例如-5/-22余-1,这个-1没有办法处理。我们不能改变结果的值那就需要一个看起来很简单但是想不到的转换公式商1*除数余数-除数商*除数除数余数-除数商*除数余数被除数所以我们要保证商不变的话只要 被除数被除数除数化简一下可以得到商被除数/除数---被除数除数/除数商1 。为了实现多组输入用scanf返回值来判断输入是否正确。题目源码的分享
#define _CRT_SECURE_NO_WARNINGS
#includestdio.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],i0;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;
} 本菜鸡总结 这是我们学校蓝桥杯选拔赛上面的题目我觉得很有挑战性写了这篇博客这种题目比较耐人寻味哪位大佬有更好的做法请在评论区不吝赐教哦~如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的