如何为平方根创建代码?

时间:2013-12-28 20:21:56

标签: c

我想编写一个不使用pow()来制作平方根的代码 这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a,I,sum=0,cnt=0;
    printf("enter number");
    scanf("%d",&a);
    for(I=1;sum<a;I+=2){
        sum+=I;
        cnt++;
    }
    printf("answer is:%d",cnt);
    return 0;
}

对于像4,9,16这样的数字,...它可以工作,但对于像10,17,21这样的数字,它不起作用,结果比它更多。
有什么问题?

7 个答案:

答案 0 :(得分:3)

#include <stdio.h>
#include <stdlib.h>

int main(){
    int a,I,sum=0,cnt=0;
    printf("enter number");
    scanf("%d",&a);
    for(I=1;sum<a;I+=2){
        sum+=I;
        cnt++;
    }
    if(sum==a)
        printf("answer is:%d",cnt);
    else
        printf("answer is:%d",cnt-1);
    return 0;
}

答案 1 :(得分:3)

    for(I=1;;I+=2){
        sum+=I;
        if(sum>a)  
              break;
        cnt++;
    }

答案 2 :(得分:2)

你可以试试这个

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,I,cnt=0;
    int sum = 0;
    printf("enter number");
    scanf("%d",&a);
    for(I=1;sum<a;I+=2){
    sum+=I;
    cnt++;

    if(sum > a)     //add this if statement to decrement cnt by 1 when sum exceeds a.
        cnt--;

    }
   printf("answer is:%d",cnt);
}

输入:

21

输出:

4

答案 3 :(得分:1)

使用巴比伦方法:

double babyl_sqrt(double x)
{
    double i;
    for (i = x / 2; fabs(i * i - x) > 0.000001f; i = (i + x / i) / 2)
        ;

    return i;
}

答案 4 :(得分:0)

要将四舍五入到最接近的int ,请稍微调整一下限制。

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

int sqrt_round(int a) {
  int I;
  int sum = 0;
  int cnt = 0;
  // for(I=1;sum<a;I+=2){
  for (I = 1; (sum + I / 2) < a; I += 2) {
    sum += I;
    cnt++;
  }
  return cnt;
}

int main() {
  int a;
  printf("enter number");
  scanf("%d", &a);
  printf("answer is:%d\n", sqrt_round(a));
  printf("answer is:%g\n", sqrt(a));
  return 0;
}

答案 5 :(得分:0)

#include<stdio.h>

int main()
{
        float  i,x=10;
        int lp;
        scanf("%f",&i);
        for(lp=0;lp<5;lp++)
        x=(x-((((x*x)-i))/(2*x)));
        printf("sqaure root of %f=%f\n",i,x);
        return 0;
}

答案 6 :(得分:0)

计算并返回x的平方根,其中x保证是一个非负整数。

由于返回类型是整数,因此十进制数字将被截断,并且仅返回结果的整数部分。

示例1:

输入:4 输出:2

示例2:

输入:8 输出:2

说明:8的平方根是2.82842 ...,并且              小数部分被截断,返回2。

public int mySqrt(int x) {
    long start = 1;
    long end = x;

    while(start + 1< end) {
        long mid = start + (end - start) / 2 ;
        if(mid * mid == x) { 
            return (int)mid;
        }else if(mid * mid < x) {
            start = mid ;
        }else {
            end = mid;
        }
    }

    if(end * end == x) {
        return (int)end;
    }

    return (int)start;
}