dotcpp.1144.自守数

题目描述

自守数是指一个数的平方的尾数等于该数自身的自然数。 
例如: 
25^2=625 
76^2=5776 
9376^2=87909376 
请求出200000以内的自守数?

输入格式

输出格式

200000以内的自守数(包括0, 数之间用两个空格分开,末尾无空格) 

样例输入

复制

样例输出

复制

0  1  5  6  25  76  376  625  9376  90625  109376

我封装一个函数之后可以满足格式输出要求,这里如果把i定义为int就错了,猜测是int到long的转化出了些问题

(后来发现其实根本不用最后换行累...而且就算要这样,你也不用知道最后一个,你只用知道第一个就够了...你懂的)

#include <stdio.h>

int db(long long int x)

{

    int i, n = 0;

    for(i=1; x/i; i*=10, n++);

    return n;

}

int pow_(int x)

{

    int i, k = 1;

    for(i=0; i<x; i++)

        k *= 10;

    return k;

}

int def(long long int x)

{

    int n;

    long long int b, i;

    for(i=x+1; i<=200000; i++)

    {

        n = db(i);

        b = i*i;

        if(b%pow_(n) == i)

            return 1;

    }

    return 0;

}

int main()

{

    int n;

    long long int b, i;

    for(i=0; i<=200000; i++)

    {

        n = db(i);

        b = i*i;

        // b = 1LL*i*i;(如果你定义i为int类型,你这里就要强制类型转换

        if(b%pow_(n) == i)

        {

            printf("%lld", i);

            if(def(i))

                printf("  ");

            else

                printf("\n");

        }

    }

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值