【问题标题】:C Program to finding perfect squares inside the given number by user?C程序在用户给定的数字内找到完美的正方形?
【发布时间】:2020-05-31 02:05:06
【问题描述】:

我试图在下面的程序中解决这个问题,但我不知道如何在给定的数字内找到完美的正方形。 我不知道如何解决这个问题。请帮我解决问题。

程序:-

编写一个 C 程序从用户那里获取一个数字,并在数字中找到完美的正方形并按升序打印。

预期输出:-

User  :- 4673681
Result:- 1,4,36,.81

User  :- 1625649
Result:- 1,16,25,49,64,256,625.

我编写了如下程序, 在这里,我做的是什么?我用一些值初始化数组并将值设为完美正方形,然后最后按升序排序。但是,我的预期完全不同。请参阅上述预期输出示例以更好地理解。

#include<stdio.h>
int main()
{
    int a[10]={4,6,3,9,7,2,8};
    int i,j,m=8,temp;
   // printf("Enter the elements:");
    //scanf("%d",&m);

    for(i=0;i<m;i++)
    {
        a[i]= a[i]*a[i];
    }
    for(i=0;i<m-1;i++)
    {
        for(j=i+1;j<m;j++)
        {
            if(a[i]>a[j])
            {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    printf("ascending orders:\n");
    for(i=0;i<m;i++)
    {
        printf("%d\n",a[i]);
    }
}

【问题讨论】:

  • “尝试过”,然后告诉我们您尝试过什么
  • 是的,Matheen 我会上传我的程序

标签: c arrays algorithm function


【解决方案1】:

有趣的小问题,很容易解决。

#include <stdio.h>
#include <math.h>

void findsquares(int num)
{
    for(int x = 1; x*x <= num; ++x)
    {
        int m = pow(10,(int)log10(x*x)+1);
        for(int t = num; t; t /= 10)
        {
            printf((t%m == x*x)? "%d, " : "", x*x);
        }
    }
}


int main(void) {
    int num = 1625649;

    findsquares(num);

    return 0;
}

输出

Success #stdin #stdout 0s 4360KB
1, 4, 9, 16, 25, 49, 64, 256, 625, 

【讨论】:

  • 此解决方案似乎存在浮点错误,并且可能会为某些值提供不正确的结果。当然使用浮点log10pow 不适合这个问题。
  • 我不同意,汤姆。我挑战你找到一个例子。
  • 我不认为你可以确定 pow(10, n) 的整数 n 将永远是一个整数,即使在数学上它是。使用sprintf(buf, "%d", x*x) + 1会更快、更安全、更清晰。
  • 绝对不可能更快。你显然不知道这段代码在做什么。
  • 我刚刚做了一个时序测试,使用x = 100,计算函数1000万次,两个版本放在一个单独的文件中以避免自动内联。正如预期的那样,sprintf 版本更快(虽然没有我希望的那么多)。浮点版本使用 -O3 的时间增加了 25%。
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 2013-07-04
  • 2019-01-12
  • 1970-01-01
  • 2010-12-05
相关资源
最近更新 更多