张世来4610484 发表于 2020-2-28 11:58:59

sqrt开方求数

在100~999中寻找符合条件的整数并依次从小到大存入数组中,它既是完全平方数,又有两位数字相同,如144,676等。
#include <stdio.h>
#include <math.h>
int jsvalue();
void main ()
{
        jsvalue();
}
int jsvalue()
{
        int i, j,k=0,g,s,b;
        for(i=100;i<=999;i++)
        {
                g=i%10;
                s=i/10%10;
                b=i/100;
                if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
                {
                        printf(" %d\n",i);
                        printf(" %d\n",sqrt(i));
                }
        }
        return 0;
}
程序是这样写的,但最后,我加了printf(" %d\n",sqrt(i));想知道开方后的i是多少,为什么运行都是0,求解,还有题目要求存入数组怎么存?

qiuyouzhi 发表于 2020-2-28 12:00:16

写一个for循环呗

qiuyouzhi 发表于 2020-2-28 12:01:56

要把开方后的结果放进一个变量里:
#include <stdio.h>
#include <math.h>
int jsvalue();
int main ()
{
      jsvalue();
      return 0;
}
int jsvalue()
{
      int i, j,k=0,g,s,b;
      int a;
      for(i=100;i<=999;i++)
      {
                g=i%10;
                s=i/10%10;
                b=i/100;
                if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
                {
                        printf(" %d\n",i);
                        a = sqrt(i);
                        printf(" %d\n",a);
                }
      }
      return 0;
}

jackz007 发表于 2020-2-28 12:35:51

本帖最后由 jackz007 于 2020-2-28 12:46 编辑

      只要在 100 ~ 999 的范围内枚举完全平方数就可以了,没有必要开平方。
#include <stdio.h>
main(void)
{
      int d , d1 , d2 , d3 , k , n                            ;
      for(n = 0 , k = 10 ; k * k < 1000 ; k ++) {
                d1 = k * k / 100                                     ;
                d2 = k * k / 10 % 10                                 ;
                d3 = k * k % 10                                    ;
                if(d1 == d2 || d1 == d3 || d2 == d3) d = k * k ;
      }
      for(k = 0 ; k < n ; k ++) printf("%d\n" , d)            ;
}
      编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
100
121
144
225
400
441
484
676
900

C:\Bin>

张世来4610484 发表于 2020-2-28 15:39:35

qiuyouzhi 发表于 2020-2-28 12:01
要把开方后的结果放进一个变量里:

试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行

qiuyouzhi 发表于 2020-2-28 15:42:18

张世来4610484 发表于 2020-2-28 15:39
试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行

有些函数是不能输出的,只能赋值进变量里

major_lyu 发表于 2020-2-28 18:09:51

#include <stdio.h>
#include <math.h>
int jsvalue();
void main ()
{
      jsvalue();
}
int jsvalue()
{
      int i, j,k=0,g,s,b;
      for(i=100;i<=999;i++)
      {
                g=i%10;
                s=i/10%10;
                b=i/100;
                // if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
                if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b||b==g))//原来的最后一个“或”运算写错了
                {
                        printf(" %d\n",i);
                     // printf(" %d\n",sqrt(i));
                        printf(" %d\n", (int)sqrt(i));    // sqrt()返回的是一个double类型数据,以%d输出需要进行类型转换。
                }
      }
      return 0;
}

张世来4610484 发表于 2020-2-29 10:19:25

major_lyu 发表于 2020-2-28 18:09


专业,厉害厉害,大哥麻烦多关注下我,以后有问题帮忙解答下
页: [1]
查看完整版本: sqrt开方求数