C语言每日一练——第50天:八进制转十进制
C语言每日一练
2021年11月1日
文章目录
- 题目描述
- 分析
- 代码实现
- 运行结果
- 网上参考
题目描述
编程实现八进制转十进制
分析
我一开始的想法是通过输入整数形式
八进制来转换成十进制输出,后来发现用字符数组
输入更方便。我这里就讲讲我用整型数据输入的转换思路:
我们都知道二进制由0和1组成,3位二进制组成在一起,就可以表示0-7这八个数,所以八进制实际上就是3位二进制的组合(同理十六进制是4位二进制的组合),C语言的位运算
操作的是二进制,算术运算
针对的是十进制,所以,我们可以通过位运算求出八进制的每一位数
(3位二进制为1位),然后通过算术运算符+
,将他们加起来。和十进制运算不同的地方在于一个两位的十进制数的十位数要乘10加上个位数即一个两位十进制数,而八进制的两位数,高位只需要乘以8。
这题我们也可以偷个懒,让C编译器帮我们算,只需要三行即可实现转换:
int octal_num = 0;
scanf("%o", &octal_num);
printf("十进制:%d\n", octal_num);
当然,不建议这样做。
至于用字符数组形式输入,那就更简单了,不用通过位运算取出八进制数每位数,具体实现见网上参考
部分。
代码实现
#include <stdio.h>/*** @brief 八进制转十进制* @param octal_number 八进制数* @return 十进制数*/
int Octal_to_Decimal(int octal_number)
{int dec_number = 0; //十进制返回值int negative = 0; //负数标志if(octal_number < 0) //负数判断{octal_number = -1 * octal_number;negative = 1;}while(octal_number != 0){//高位之和乘8再加上低3位,低3位即八进制最低位dec_number = dec_number * 8 + (octal_number & 0x7) ;octal_number >>= 3; //右移3位}if(negative)return -1 * dec_number;return dec_number;
}#define FIRST //使用第一种方法,注释掉此行则使用第二种方法int main()
{int octal_num = 0;
#ifdef FIRSTprintf("输入一个八进制数\n");scanf("%o", &octal_num);printf("对应的十进制为%d\n", Octal_to_Decimal(octal_num));#else/* 偷懒法 */puts("八进制:");scanf("%o", &octal_num);printf("十进制:%d\n", octal_num);
#endifreturn 0;
}
运行结果
网上参考
原文链接:https://www.runoob.com/cprogramming/c-exercise-example82.html
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//#include<stdio.h>
#include<stdlib.h>
int main()
{int n=0,i=0;char s[20];printf("请输入一个8进制数:\n");gets(s);while(s[i]!='\0'){n=n*8+s[i]-'0';i++;}printf("刚输入的8进制数转化为十进制为\n%d\n",n);return 0;
}
C语言每日一练——第50天:八进制转十进制相关推荐
- C语言每日一练——第80天:换分币问题
C语言每日一练 2022年2月13日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 将5元的人民币兑换成1元.5角和1角的硬币,共有多少种不同的兑换方法. 问题分析 列举3元1次方程 1 ...
- C语言每日一练——第81天:马克思手稿中的数学题
C语言每日一练 2022年2月17日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 马克思手稿中有一道趣味数学问题:有30个人,其中有男人.女人和小孩,他们在同一家饭馆吃饭,总 ...
- 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值
题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...
- C语言每日一练——第85天:三色球问题
C语言每日一练 2022年3月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少 ...
- C语言每日一练——第73天:谁是窃贼问题
C语言每日一练 202年1月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的 ...
- C语言每日一练——第35天:打印菱形
C语言每日一练 2021年10月13日 题目描述 输入菱形的高度n(必须为奇数),即正中间星号的个数,打印出用星号组成的菱形 分析 要打印菱形,先要构想要打印的图形样子,就比如下图这种: 我们可以根据 ...
- C语言每日一练——第28天:要求输出国际象棋棋盘
C语言每日一练 2021年10月6日 题目描述 要求输出国际象棋棋盘 分析 先看看国际象棋的棋盘的长相: 可以看出,国际象棋棋盘呈正方形,里面包含8x8总共64个小方格,它们黑白相间.要想在控制台输出 ...
- C语言每日一练——第10天:求一个矩阵主对角线及副对角线元素之和
C语言每日一练 2021年9月18日 题目描述 求一个矩阵主对角线及副对角线元素之和 分析 在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于 ...
- C语言每日一练——第1天:字母大小写转换
C语言每日一练 2021年9月9日 本人C语言菜鸟,最近工作中频频出现C语言小错误,遂决定使用笨方法提高我的C语言水平,坚持每天一个C语言小练习,养成C语言手感,从此让编程成为习惯. 题目描述 从键盘 ...
- 【C语言每日一练——第1练:字母大小写转换】
C语言每日一练 2022年6月13日 题目描述 从键盘输入一个大写字母,要求改用小写字母输出 分析 从键盘输入可以使用scanf或getchar等函数. 大写字母是一个字符,字符类型数据在C语言中是以 ...
最新文章
- mybatis中![CDATA[]]的作用
- 处理南通一客户:Fortigate 310B Firmware丢失
- 【数据结构】八大数据结构分类
- java-String类
- springCloud - 第1篇 - 服务的注册 Eureka
- 思维导图 源码 php,使用思维导图,优雅的完成自己的代码
- 写会议纪要必备的录音转文字软件推荐,让你再也不用担心职场会议
- 《LDA数学八卦》读后笔记
- 计算机页面添加文字水印在哪,轻松学会给office2013 word文档添加图片/文字背景水印以及让水印铺满整个页面-网络教程与技术
-亦是美网络...
- 线性代数之 矩阵的迹
- fig-tlo_PHP-FIG,Quo Vadis?
- 揭秘HTML5小游戏排名,究竟哪些游戏最受欢迎?
- 计算机视觉与图形学-立体匹配专题-金字塔立体匹配网络
- folly库安装(5)folly的安装
- KBQA知识问答概述
- 异常检测 | 基于Siamese网络学习距离函数来定位视频中的异常
- 计算机应用基本技能试题,计算机应用基本技能.doc
- 对于霸榜视频超分领域的VRT方法的深度解读
- ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not found (required
- 一日一练:有效的回旋镖
热门文章
- 构建具有时间依存协变量的Elastic-net Cox模型
- cox回归模型python实现_生存分析Cox回归模型(比例风险模型)的spss操作实例
- 强化学习DQN 入门小游戏 最简单的Pytorch代码
- 【驱动详解】如何理解驱动程序
- 【nginx流程分析之初始化cycle】
- 如何向PD充电器取电9V12V15V20V给电池或者智能家居供电快充?
- 诗经 - 小雅 -采薇
- 服务器共享文件夹用户名和密码怎么设置,如何在共享文件夹设登录帐号和密码 - 卡饭网...
- 分段线性插值法实验报告_试验二插值法(含实验报告格式)-金锄头文库
- Gartner 研讨会 “九问数字化转型” 会后感分享