鱼C论坛

 找回密码
 立即注册
查看: 1247|回复: 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
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-28 12:00:16 | 显示全部楼层
写一个for循环呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

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

C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

有些函数是不能输出的,只能赋值进变量里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

专业,厉害厉害,大哥麻烦多关注下我,以后有问题帮忙解答下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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