c语言中怎样判断完全平方数 (c语言常用数学函数平方)

今天的这道题目呢,相较于之前的题目而言,难度有些提升。

既要求统计完全平方数,同时也要求能在完全平方数中找到至少有两位数字相同的数。

我们知道,完全平方数,就是两个相同的数进行相乘所得到的。

换句话说,完全平方数开算术平方根后,得到的数就只有一个数。

以1、4、9为例,开平方根后,得到1、2、3,同时,1、2、3的完全平方数大家也可以发现,就是1、4、9这三个数。

c语言统计实数个数,c语言中想要找完全平方数怎么做

在这道题目中,是以144、676为例,比方说144是12的完全平方,676则是26的完全平方。

但是呢,这道题目并不仅仅是让我们找到这些完全平方数,而是给定一个整数N,且这个整数N的范围是在n1到n2之间的。

梳理逻辑

根据题目要求,我们先来梳理一下逻辑,遇到函数题没有头绪的时候,最重要的办法就是进行反推。

根据题目给定的测试用例反推回去,就能够推理出题目的逻辑了。

c语言统计实数个数,c语言中想要找完全平方数怎么做

很显然,本道题目的主要逻辑分为三部分:

1、找出完全平方数。

2、找出具有两个相同数字的完全平方数。

3、数数,统计这些数的数量,得到最终结果。

先是判断完全平方数,可以定义一个变量n,如果n的平方等于要求的值,则说明N为完全平方数,之后再来处理N,则N要满足其中有两个数是相同的情况,那就得将N给拆分开来,比方说以121为例,那就要拆分成数字1、2、1,然后比较,其中有两个1,则满足要求。

代码实现

//统计某类完全平方数
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
    int n1, n2, i, cnt;

    scanf("%d %d", &n1, &n2);
    cnt = 0;
    for ( i=n1; i<=n2; i++ ) {
        if ( IsTheNumber(i) )
            cnt++;
    }
    printf("cnt = %d\n", cnt);
    return 0;
}
int IsTheNumber ( const int N )//对单独的数字N进行判断即可,N是常量
{
    int Perfect_seeksquare=N;//定义要找寻的完全平方数 121为例
    int store[10]={0};
    int n=sqrt(N);//n=11
    if(n*n==N)//11*11=121,主要目的是用来判断完全平方数的
    {//如果要判断
        while(Perfect_seeksquare!=0)//121!=0
        {
            store[Perfect_seeksquare%10]++;//store[1] = 1+0 = 1
            //store[2] = 1+0=1;
            //store[1] = 1+1=2;
            //很显然,这里可以发现,当某个特定位置的数大于1的时候,则说明有多个数字
            Perfect_seeksquare=Perfect_seeksquare/10; //12、1
        }
        for(int i=0;i<10;i++)
        {
            if(store[i]>1)//只要判断是否大于1即可
            {
                return 1;
            }
        }
        return 0;
     } 
    else{
        return 0;
    }
}

结果测试

c语言统计实数个数,c语言中想要找完全平方数怎么做

c语言统计实数个数,c语言中想要找完全平方数怎么做

总结

函数题相对于编程题来说,难度既可以说难,也可以说是简单,难是难在梳理逻辑的这一块,简单是简单在不需要从头开始梳理逻辑,可以根据题目给定的测试程序样例来梳理。