您的位置:首页 > 其它

趣味算法-自守数

2012-01-24 18:47 274 查看
趣味算法-自守数:

一个正整数的平方的末尾几位数等于这个数本身,那么这个数为自守数。

1) 计算当前数x的位数n;

2) 计算当前数的平方数 xpower;

3) 计算平方数与原数的差,并对于10的n次方取模;

4) 若模为0则该数为自守数。

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

//0: not a ZiShou Number
//1: is a ZiShou Number
int IsZishouNum(int nNum)
{
int i = 0;
int n = 1;
int nTmp = 0;
int nPower10 = 1;

nTmp = nNum;
while(nTmp/10 > 0)
{
n++;
nTmp = nTmp / 10;
}

nTmp = pow(nNum, 2);

nTmp = nTmp - nNum;
nPower10 = pow(10, n);
if ((nTmp % nPower10) == 0)
{
i = 1;
}
else
{
i = 0;
}
return i;
}

int main()
{
int i = 0;

for (i = 0; i < 1000000; i++)
{
if (1 == IsZishouNum(i))

{
printf("Number %d is a zi shou number\n", i);
}
}
printf("test end\n");
scanf("%d", &i);
return 0;
}


算法复杂度分析:

计算范围: nRange

当前数的位数: n

O(n, nRange) = n * nRange
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: