【Week1 -3】求满足abcd=(ab+cd)^2的数

【问题背景】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;
}
 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值