【问题背景】C语言程序设计慕课版第二版第四章课后题 4-3。
(这是很有歧义的一道题,刚开始我就理解错意思啦,现经过搜索讨论后改动原题目)
【问题题目】求满足abcd=(ab+cd)^2的数
【问题分析】我刚开始理解的是a乘b乘c乘d等于a乘b加c乘d的和的二次方。经过网上搜索以及与同学讨论,发现理解存在偏差。现在输出的代码是指abcd(四位数)等于ab(两位数)与cd(两位数)的和的二次方。
【代码呈上】
#include <stdio.h>
#include <math.h>
int main()
{int a,b,c,d;
int ab,cd;
int abcd;
for(a=1;a<=9;a++)
{for(b=0;b<=9;b++)
{for(c=0;c<=9;c++)
{for(d=0;d<=9;d++)
{
abcd=(a*1000+b*100+c*10+d);
ab=a*10+b;
cd=c*10+d;
if(abcd==((ab+cd)*(ab+cd)))
{
printf("%d\n",abcd);
}
}
}
}
}return 0;
}
【学习借鉴】 以上是我写的代码,除此之外,还有其他博主的三个代码供大家参考学习。
(如侵权请告知删除)
#include <stdio.h>
int main()
{
int n,a,b;
printf("There are following numbers with 4 digits satisfied condition:\n");
for( n = 1000;n < 10000;n++ )
{
a = n/100;//截取N的前两位存于a
b = n%100;//截取N的后两位存于b
if((a + b)*(a + b) == n)
{
printf("%10d",n);
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,m,n;
printf("There are following numbers with 4 digits satisfied condition:\n");
for( i = 1;i < 10;i++ )
{
for( j = 0;j < 10;j++ )
{
for( m = 0;m < 10;m++ )
{
for( n = 0;n < 10;n++ )
{
if((i*1000 + j*100 + m*10 + n )== pow((i*10 + j + m*10 + n),2))
{
printf("%10d",i*1000 + j*100 + m*10 + n);
}
}
}
}
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int a[4],i,j,k;
printf("There are following numbers with 4 digits satisfied condition:\n");
for( i = 1000 ;i < 10000;i++ )
{
for( j = 0,k = 10000;k >= 10;j++ )
{
a[j] = (i%k)/(k/10);
k /= 10;
}
if((a[0]*1000 + a[1]*100 + a[2]*10 + a[3]) == pow((a[0]*10+a[1]+a[2]*10+a[3]),2))
{
printf("%10d",a[0]*1000 + a[1]*100 + a[2]*10 + a[3]);
}
}
printf("\n");
return 0;
}