描述

计算一个浮点数的立方根,不使用库函数。

保留一位小数。

数据范围:∣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-求解立方根相关推荐

  1. python牛顿法求立方根_【华为机试】求解立方根(牛顿迭代法)

    先分享马同学的科普,深入浅出,很容易理解.https://www.matongxue.com/madocs/205.html 关于牛顿迭代法,除开理论部分,核心公式其实就一个. 题目描述 •计算一个数 ...

  2. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  3. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

  4. 【牛客网】华为机试题(00、C++版本)

    华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...

  5. 【牛客网-华为机试题目录】持续更新中

    文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...

  6. 华为机试题库+题解【C语言版】

    文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...

  7. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  8. 【华为机试题分析-C/C++】知识点分类总结

    专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...

  9. 【华为机试题分析】 4 字符串分割

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...

最新文章

  1. 调试代码遗留_陷入遗留代码地狱吗? 这里有一些想法可以帮助您处理情况
  2. Python五种常见的算法,你都了解么
  3. 进阶篇第十一期:高德地图的使用
  4. 《Android传感器开发与智能设备案例实战》——第1章,第1.2节Android的巨大优势...
  5. CG CTF WEB 签到2
  6. python visa模块_已经安装了pyvisa仍然报错没有模块
  7. c#equals方法源码_C#中的Int32.Equals()方法示例
  8. es6 循环加载ES6模块
  9. Mybatis源码解析:sql参数处理(3)
  10. Atititi ui之道 attilax著 v3 s11.docx 1. 概览 2 1.1. 软件设计可分为两个部分:编码设计与UI设计 2 2. 用户界面设计的三大原则是:置界面于用户的控制之下;
  11. ByteBuf详解和Netty中的拆包粘包原理解析
  12. 2021 年 6 个GitHub推荐前端项目
  13. python酒店评论分析_酒店评论的情感分析
  14. 在 MQL5 中创建多色彩指标
  15. 经济学基础(本)【4】
  16. 其他笔记 - matlab代码转换为python代码(SMOP、numpy)
  17. 数据挖掘之监督学习篇
  18. AI就是闭上眼想要一份凉皮,睁开眼就会有一份凉皮摆在眼前
  19. poi-tl导出word复杂表格(单元格合并,生成复杂表格)
  20. 抵押贷款买房,一旦房价暴跌,银行可能会收走你家的房子

热门文章

  1. Ubuntu 15.04折腾手记(4)
  2. android判断主线程_Android主线程和子线程区别详解
  3. 正好配资简述大票震荡小票稳
  4. 谁来挑战中国跳水梦之队 金童功力几何黑马潜伏
  5. 为知笔记如何修改默认字体大小,字体行距,代码字体大小,字体行距等等(亲证有效)
  6. 23 二叉搜索树的后续遍历数列
  7. 如何使用Qt实现腾讯云实时音视频功能?
  8. mini-Imagenet处理
  9. https://vjudge.net/problem/UVA-11627 阅读理解
  10. 宝塔面板 存储型xss 弹弹弹