科比vs罗伊扯球衣:个4位的完全平方数;B是一个4位数,每一位相同;C是4位完全平方数 已知C=A-B,请编程求出所有这样的4位数A

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/04 14:58:21
请用C/C++语言编写这个程序!
谢谢您的援手,感激之致.

#include<stdio.h>
#include<math.h>
main()
{
int a,b,c,b1,b2,b3,b4;
for(a=1000;a<=9999;a++)
for(b=1000;b<=9999;b++)
for(c=1000;c<=9999;c++)
{
if((c==a-b)&&(pow(sqrt(a),2)==a)&&(pow(sqrt(c),2)==c))
{
b1=b/1000;
b2=b%1000/100;
b3=b%100/10;
b4=b%10;
if(b1==b2&&b1==b3&&b1==b4&&b2==b3&&b2==b4&&b3==b4)
printf("%6d%6d%6d\n",a,b,c);
}
}
}

#include<stdio.h>
#include<math.h>
main()
{
int begin,end;
int i,a,b,c;
int num=0;

clrscr();
begin=sqrt(1000)+1;
end=sqrt(10000-1111);
for(i=begin;i<=end;++i){
c=pow(i,2);
for(b=1111;b<=9999;b+=1111){
a=b+c;
if(a<10000) {
printf("%d:%d=%d+%d\n",++num,a,b,c);
if(num%23==0){
printf("press anykey to continue...");
getch();
clrscr();
}
}
else break;/*c+b和大于10000跳出*/
}
}
printf("\n total = %d",num);
getch();
}

楼上的程序有问题。
首先,B的各位相同,可以用for(b=1111;b<=9999;b+=1111);然后就不用额外判断B的各位是否相同了。
其次,判断一个数是否完全平方数,我用的是 int(pow(int(sqrt(a)),2)==a,做两次int强制转换,因为sqrt和pow是double型运算,精度高,无论哪个数开方再乘方的结果都与原数只相差零点几,再取整后肯定等于原数。