这道题我读了很久不知道什么意思,最后拿数带进去一个个的算,发现算到后来会出现循环的情况,这时候再读题就明白了
题目是说,给你一个四位数,其中可以包涵前导零,然后平方,平方后的结果如果不够八位数的话就补前导零,然后再从
第三位数字开始取四位数,再次进行平方,要求你计算总共有多少个不同的数字,原先以为4位数的平方会溢出,拿计算器
算了下9999平方也才8位,看来我想多了。
分析,这道题可以用哈希表进行存储,当每一位置的数到达了2说明开始数字循环了,以后出现的数字就会是重复的了
其中取四位数,可以先整除100;然后再对10000取余,当时我想的是用个for循环依次对10取余,在除以10,这样明显
麻烦很多
#include <stdio.h>
#include <math.h>
#include <string.h>
const int MAXN=10030;
int a[MAXN];
int main(int argc, char *argv[])
{
long n;
while(scanf("%ld",&n) && n)
{
int count=1;
memset(a,0,sizeof(a));
a[n]=1;//这里没写wa一次,初始的n忘记存储了
while(1)
{
long t=n*n/100;
n=t%10000;
a[n]++;
if(a[n]==2) break;
count++;
}
printf("%d\n",count);
}
return 0;
}