首页 > 试题广场 >

请在小于99999的正整数中找符合下列条件的数,它既是完全平

[问答题]
请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。用c语言编写(不能用数字转换成字符串)。
#include <iostream>
#include<cmath>
using namespace std;

bool isHaveSame(int num)
{
    int i = 0, j=0;
    int hash[10] = {0};

    while (num > 0)
    {
        j = num % 10;
        hash[j] += 1;
if(hash[j]>1)
return true;
        num = num / 10;
    }
return false;  
}
void main()
{   
int N=9999;
int times =sqrt(double(N));
for(int i=1;i<times;i++)
{
int num = i*i;
if(isHaveSame(num))
cout<<num<<endl;
}
}

发表于 2015-07-19 11:06:06 回复(0)
//判断一个数是否有两位数字相同
bool Same2(int num){
    int a[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
    int i=0;
    while(num){
        a[num%10]++;
        num/=10;
    }
    for(i=0;i<10;i++){
        if(a[i]>1)
            return true;
    }
    return false;
}
//第二个函数,判断一个数是否为完全平方数
bool IsSqr(int num){
    int i=0;
    for(i=0;i<=num;i++){
        if(i*i==num)
            return true;
    }
    return false;
}
int main(){
    int i=0;
    for(i=0;i<99999;i++){
        if(Same2(i) && IsSqr(i)){
            printf("%d ",i);
        }
    }
    printf("\n");
    return 0;
}

发表于 2015-06-24 16:19:32 回复(0)
#include<stdio.h>
#include<math.h>
//函数havesamenum确认num是否满足条件
int havesamenum(int num)
{
    int i = 0, j;
    char a[10] = {0};

    while (num > 0)
    {
        j = num % 10;
        a[j] += 1;
        num = num / 10;
    }
    while (a[i] <= 1 && i < 10)
        i++;
    if (i < 10)
        return 1;
    else
        return 0;
}
void main(void)
{
    int i, j, m;

    m = (int)sqrt(99999);
    for (i = 1; i < m; i++)
    {
        j = i * i;
        if (1 == havesamenum(j))
            printf("%6d\t", j);
    }
}

发表于 2014-11-13 14:09:14 回复(0)