华为机试—求数的平方根立方根

求一个正整数X的平方根Y,立方根Z。

求平方根和立方根我们一般用牛顿迭代法,下面是对应的公式。

平方根迭代公式a(n+1)=(a(n)+Y/a(n))/2,其中Y为待求平方根。

立方根迭代公式a(n+1)={2a(n)+Z/{[a(n)]^2}}/3,其中Z为待求平方根。

java

import java.util.Scanner;

public class cubeSquare {

    public double sqrt_root(double a, double x0) {
        double x1, y;
        x1 = (x0 + a / x0) / 2.0;
        if (Math.abs(x1 - x0) >= 0.00001)
            y = sqrt_root(a, x1);
        else
            y = x1;
        return y;
    }

    public double cube_root(double a, double x0) {
        double x1, y;
        x1 = (2 * x0 + a / (x0 * x0)) / 3.0;
        if (Math.abs(x1 - x0) >= 0.00001)
            y = cube_root(a, x1);
        else
            y = x1;
        return y;
    }

    public static void main(String[] args) {
        cubeSquare cs = new cubeSquare();

        Scanner s = new Scanner(System.in);
        double x = s.nextDouble();

        System.out.println(cs.sqrt_root(x, 1.0) + ":" + cs.cube_root(x, 1.0));

    }

}
#include  <math.h>
#include  <stdio.h>

double sqrt_root(double a,double x0)
{
    double x1,y;
    x1=(x0+a/x0)/2.0;
    if(fabs(x1-x0)>=0.00001)
        y=sqrt_root(a,x1);
    else
        y=x1;
    return y;
}

double cube_root(double a,double x0)
{
    double x1,y;
    x1=(2*x0+a/(x0*x0))/3.0;
    if(fabs(x1-x0)>=0.00001)
        y=cube_root(a,x1);
    else
        y=x1;
    return y;
}

int main()
{
    double x;
    printf("Enter x: ");
    scanf("%lf",&x);
    printf("The square root of %lf is %f \n",x, sqrt_root(x,1.0));
    printf("The cube root of %lf is %f \n",x, cube_root(x,1.0));

    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-03 14:46:32

华为机试—求数的平方根立方根的相关文章

华为机试 --- 求最大三位数

题目:输入10位0-9数字,取其中三位不同数字组合,求组合出来的最大三位数. 如输入 1 2 3 4 5 6 7 8 9 0,组合出来987最大. 测试代码如下: #include <stdio.h> #include <stdlib.h> int IsSame(int *a, int num); int main() { int i=0; int j=0; int a[10]={0}; int input =0; int length =0; int temp=0; for (i

[华为机试]求出数组中所有奇数之和以及所有偶数之和

代码: #include <iostream> #include <sstream> #include <fstream> #include <string> int main() { int num[100]; int odd = 0, even = 0; std::string str; getline(std::cin, str); std::stringstream s(str); int j = 0; while(getline(s, str, '

华为机试-求最大连续bit数

题目描述功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 输入: 一个byte型的数字 输出: 无 返回: 对应的二进制数字中1的最大连续数输入描述:输入一个byte数字输出描述:输出转成二进制之后连续1的个数示例1输入 3输出 2 程序实现 import java.util.Scanner; /** * 功能: 求一个byte数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1 * * 输入: 一个b

华为机试—Smith数

对于一个正整数n,如果它的各位之和等于它的所有质因数的各位之和,则该数被称为Smith数.例如,31257=3*3*23*151,31257 的各位数字之和为3+1+2+5+7=18,它的所有质因数的各位数字之和为3+3+2+3+1+5+1=18,因此,31257是一个Smith数.编写一个程序判断输入的正整数是不是Smith数. 输入说明:有多组数据,每组数据只有一个整数n(<100000,占一行),为0时表示输入结束. 输出说明:对于每一组数据,输出一个yes或no(表示该数是否为Smith

2015华为机试——求n!中含有0的个数

题目描述: 求n!中含有0的个数,例如1!= 1 含有0个0,5! = 120 含有1个0,10! = 3628800 含有2个0 解题思路: 这题之前在leetcode中做过,如果先对n进行阶乘运算,然后%10求0的个数.但是n!很有可能溢出,所以需要找到它的等效方法,0的个数即为10的个数,即为5于2的个数,显然在n!中,2的个数要大于5的个数,因此只要算出n范围内有多少个5就OK 代码如下: public static int getZeroCount(int n) { /*在这里实现功能

[华为机试]求出数组中全部奇数之和以及全部偶数之和

代码: #include <iostream> #include <sstream> #include <fstream> #include <string> int main() { int num[100]; int odd = 0, even = 0; std::string str; getline(std::cin, str); std::stringstream s(str); int j = 0; while(getline(s, str, '

(华为机试)双向链表实现字符串条件表达式的求值

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值. 表达式支持如下运算:"+.-.*./",其中"*"和"/"的优先级要高于"+"和"-": 不需要考虑括号,且表达式之间没有空格: 例如:对于表达式"3-2+15*2",该表达式值为31. 运行时间限制: 60 Sec 内存限制: 256 MByte 输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号

2014华为机试西安地区B组试题

2014华为机试西安地区B组试题 题目一.亮着点灯的盏数 一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.-n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号码凡是1的倍数的电灯的开关拉一下:接着第二个学生把号码凡是2的倍数的电灯的开关拉一下:接着第三个学生把号码凡是3的倍数的电灯的开关拉一下:如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下.n个学生按此规定走完后,长廊里电灯有几盏亮着. 注:电灯数和学生

华为机试—介绍、剖析、建议

一.华为机试介绍 1.大致介绍 时间:120分钟 环境:Visual Studio(去年是vs2005).Visual C++.VC 6.0.Eclipse(Java) 题量:共3题 初级题--60分--3组测试数据 中级题--100分--5组测试数据 高级题--160分--8组测试数据 注:初级题和中级题为必答题,高级题为附加题. 提交次数:每题最多5次 评判方式:按通过测试数据组数给分,每通过一组得20分 2.考试说明 这里有一个老版的机试考试说明,供大家参考: C/C++,JAVA机试流程