鱼C论坛

 找回密码
 立即注册
查看: 1542|回复: 7

[已解决]sqrt开方求数

[复制链接]
发表于 2020-2-28 11:58:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在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,求解,还有题目要求存入数组怎么存?
最佳答案
2020-2-28 18:09:51
  1. #include <stdio.h>
  2. #include <math.h>
  3. int jsvalue();
  4. void main ()
  5. {
  6.         jsvalue();
  7. }
  8. int jsvalue()
  9. {
  10.         int i, j,k=0,g,s,b;
  11.         for(i=100;i<=999;i++)
  12.         {
  13.                 g=i%10;
  14.                 s=i/10%10;
  15.                 b=i/100;
  16.                 // if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
  17.                 if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b||b==g))//原来的最后一个“或”运算写错了
  18.                 {
  19.                         printf(" %d\n",i);
  20.                        // printf(" %d\n",sqrt(i));
  21.                         printf(" %d\n", (int)sqrt(i));    // sqrt()返回的是一个double类型数据,以%d输出需要进行类型转换。
  22.                 }
  23.         }
  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-28 12:00:16 | 显示全部楼层
写一个for循环呗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 12:01:56 | 显示全部楼层
要把开方后的结果放进一个变量里:
  1. #include <stdio.h>
  2. #include <math.h>
  3. int jsvalue();
  4. int main ()
  5. {
  6.         jsvalue();
  7.         return 0;
  8. }
  9. int jsvalue()
  10. {
  11.         int i, j,k=0,g,s,b;
  12.         int a;
  13.         for(i=100;i<=999;i++)
  14.         {
  15.                 g=i%10;
  16.                 s=i/10%10;
  17.                 b=i/100;
  18.                 if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
  19.                 {
  20.                         printf(" %d\n",i);
  21.                         a = sqrt(i);
  22.                         printf(" %d\n",a);
  23.                 }
  24.         }
  25.         return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-28 12:35:51 | 显示全部楼层
本帖最后由 jackz007 于 2020-2-28 12:46 编辑

        只要在 100 ~ 999 的范围内枚举完全平方数就可以了,没有必要开平方。
  1. #include <stdio.h>
  2. main(void)
  3. {
  4.         int d[100] , d1 , d2 , d3 , k , n                            ;
  5.         for(n = 0 , k = 10 ; k * k < 1000 ; k ++) {
  6.                 d1 = k * k / 100                                     ;
  7.                 d2 = k * k / 10 % 10                                 ;
  8.                 d3 = k * k % 10                                      ;
  9.                 if(d1 == d2 || d1 == d3 || d2 == d3) d[n ++] = k * k ;
  10.         }
  11.         for(k = 0 ; k < n ; k ++) printf("%d\n" , d[k])              ;
  12. }
复制代码

        编译、运行实况:
  1. C:\Bin>g++ -o x x.c

  2. C:\Bin>x
  3. 100
  4. 121
  5. 144
  6. 225
  7. 400
  8. 441
  9. 484
  10. 676
  11. 900

  12. C:\Bin>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-28 15:39:35 | 显示全部楼层
qiuyouzhi 发表于 2020-2-28 12:01
要把开方后的结果放进一个变量里:

试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

有些函数是不能输出的,只能赋值进变量里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-28 18:09:51 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <math.h>
  3. int jsvalue();
  4. void main ()
  5. {
  6.         jsvalue();
  7. }
  8. int jsvalue()
  9. {
  10.         int i, j,k=0,g,s,b;
  11.         for(i=100;i<=999;i++)
  12.         {
  13.                 g=i%10;
  14.                 s=i/10%10;
  15.                 b=i/100;
  16.                 // if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b|b==g))//只有当i是完全平方数开方再取整才不会丢失任何数据
  17.                 if((i==(int)sqrt(i)*(int)sqrt(i))&&(g==s||s==b||b==g))//原来的最后一个“或”运算写错了
  18.                 {
  19.                         printf(" %d\n",i);
  20.                        // printf(" %d\n",sqrt(i));
  21.                         printf(" %d\n", (int)sqrt(i));    // sqrt()返回的是一个double类型数据,以%d输出需要进行类型转换。
  22.                 }
  23.         }
  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 10:19:25 | 显示全部楼层

专业,厉害厉害,大哥麻烦多关注下我,以后有问题帮忙解答下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-15 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表