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,求解,还有题目要求存入数组怎么存? 写一个for循环呗 要把开方后的结果放进一个变量里:
#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: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> qiuyouzhi 发表于 2020-2-28 12:01
要把开方后的结果放进一个变量里:
试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行 张世来4610484 发表于 2020-2-28 15:39
试了下,确实可以,但是不懂为什么要再放到一个变量里,直接sqtr(i),为什么不行
有些函数是不能输出的,只能赋值进变量里 #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;
} major_lyu 发表于 2020-2-28 18:09
专业,厉害厉害,大哥麻烦多关注下我,以后有问题帮忙解答下
页:
[1]