华为机试题107-求解立方根
描述
计算一个浮点数的立方根,不使用库函数。
保留一位小数。
数据范围:∣val∣≤20
输入描述:
待求解参数,为double类型(一个实数)
输出描述:
输出参数的立方根。保留一位小数。
示例1
输入:
19.9
输出:
2.7
示例2
输入:
2.7
输出:
1.4
解题思路:
题目明确要求不能使用库函数,所以不能使用pow函数
因为题目输入的数val比较小,绝对值不大于20,且立方根保留一位小数,所以我们可以这么做:
准备工作:先判断val是正数还是负数或是0,若是0,直接打印其立方根为0就行,如果是负数,我们可以将flag置为-1(flag初始化为1),并将该负数乘-1转换成正数,按照这个正数来求立方根,最后乘flag即可,比如输入值val为-8,我们将flag由1改为-1,并将输入值val乘-1得到8,算出8的立方根为2,最后打印的时候乘flag就得到-2,如果是正数,则不用改变flag(1),求出其立方根后乘flag也不影响,那么问题的关键来了,在不调用库函数的前提下,如何求一个正数的立方根?
由于输入值val的绝对值不大于20,显然其立方根不大于3(3³为27),那么我们首先判断val(转换成正数后)的值,如果其小于1,那么其立方根的范围是在0,0.1,0.2,0.3.......1.0,我们可以求出这些立方根的立方,再求出此立方值与输入值的误差,其中误差最小的就是立方根了。同理,如果val大于1小于8,那它的立方根就是在1.0,1.1,1.2,1.3.......2.0之间的某个数,该数的立方与输入值是最接近的。
用题目的示例说明一下,如果输入值是19.9,因为其大于8(2³),所以其立方根就是2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0中的某个数,该数的立方与19.9是最接近的,以下附上它们的立方分别与19.9的误差(负的误差已转成正的):
很显然,当数为2.7时,2.7³与19.9的误差是最小的,仅为0.217,所以它就是19.9在保留1位小数时的立方根。
以下为代码:
#include <stdio.h>
int main()
{double val,err[11],base,i;char flag,k,min_err;while(scanf("%lf",&val)!=EOF){flag=1; //flag记录输入值是正数还是负数,1表示正数,-1表示为负数if(val==0){printf("0.0");continue;}else if(val<0){flag=-1; //val为负数,flag置为-1,将val转成正数,更好求其立方根val*=-1;} if(val<1)base=0; //val小于1,则立方根不大于1else if(val<8)base=1; //val小于8,立方根不大于2elsebase=2; //val大于等于8,小于20,立方根不大于3for(i=0,k=0;i<=1;i+=0.1,k++){err[k]=val-(base+i)*(base+i)*(base+i); //每次在base基础上加0.1,算出其立方if(err[k]<0) //与输入值val的误差,并全转换为正err[k]*=-1;}min_err=0;for(k=1;k<11;k++){if(err[min_err]>err[k]) //找到误差最小值的下标min_err=k;}printf("%.1lf\n",flag*(base+min_err*0.1)); }return 0;
}
华为机试题107-求解立方根相关推荐
- python牛顿法求立方根_【华为机试】求解立方根(牛顿迭代法)
先分享马同学的科普,深入浅出,很容易理解.https://www.matongxue.com/madocs/205.html 关于牛顿迭代法,除开理论部分,核心公式其实就一个. 题目描述 •计算一个数 ...
- 华为电脑c语言总是错误,关于华为机试题求代码!解决方法
关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...
- 牛客网华为机试题(JavaScript)
最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...
- 【牛客网】华为机试题(00、C++版本)
华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...
- 【牛客网-华为机试题目录】持续更新中
文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...
- 华为机试题库+题解【C语言版】
文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...
- 华为机试python编程题_牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 【华为机试题分析-C/C++】知识点分类总结
专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...
- 【华为机试题分析】 4 字符串分割
我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...
最新文章
- 调试代码遗留_陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况
- Python五种常见的算法,你都了解么
- 进阶篇第十一期:高德地图的使用
- 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...
- CG CTF WEB 签到2
- python visa模块_已经安装了pyvisa仍然报错没有模块
- c#equals方法源码_C#中的Int32.Equals()方法示例
- es6 循环加载ES6模块
- Mybatis源码解析:sql参数处理(3)
- Atititi ui之道 attilax著 v3 s11.docx 1. 概览	2 1.1. 软件设计可分为两个部分:编码设计与UI设计	2 2. 用户界面设计的三大原则是:置界面于用户的控制之下;
- ByteBuf详解和Netty中的拆包粘包原理解析
- 2021 年 6 个GitHub推荐前端项目
- python酒店评论分析_酒店评论的情感分析
- 在 MQL5 中创建多色彩指标
- 经济学基础(本)【4】
- 其他笔记 - matlab代码转换为python代码(SMOP、numpy)
- 数据挖掘之监督学习篇
- AI就是闭上眼想要一份凉皮,睁开眼就会有一份凉皮摆在眼前
- poi-tl导出word复杂表格(单元格合并,生成复杂表格)
- 抵押贷款买房,一旦房价暴跌,银行可能会收走你家的房子