HJ99. 自守数
描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数
输入描述
int型整数
输出描述
n以内自守数的数量。
示例1
输入:
6
输出:
4
说明:
有0,1,5,6这四个自守数示例2
输入:
1
输出:
2
说明:
有0, 1这两个自守数C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-06
#include<stdio.h> int main() { unsigned long getNum =0 ; while(scanf("%d",&getNum)!=EOF) { unsigned long sum; int no=0; int i=0; getchar(); for(i=0;i<=getNum;i++) { sum=i*i; if(sum%10 == i || sum%100 == i || sum%1000 == i || sum%10000 == i|| sum%100000 == i) { no++; } } printf("%d\n",no); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 268KB, 提交时间: 2020-12-27
#include <stdio.h> int repeat_code(int n) { int tmp = n*n; for( ; n; ){ if(n%10 == tmp%10){ n/=10; tmp/=10; continue; } return 0; } return 1; } int main(coid) { char flag; int i, j, k, num, cnt, arr[88], idx=0, opt[88], id=0; for( ; scanf("%d", &num)!=EOF; ){ if(!num){ opt[id]=0; opt[id+1]=1; id+=2; continue; } opt[id]=num; id+=2; for(i=idx-1; i>=0; i--) if(arr[i]<=num) break; if(i>=0 && arr[i]==num) continue; for(j=idx-1; j>i; j--) arr[j+1]=arr[j]; arr[j+1]=num; idx++; } j=cnt=1; for(i=flag=0; i<idx; i++){ num=arr[i]; if(flag==1){ if( repeat_code(j) ) cnt--; flag=0; } else if(flag==2){ if( repeat_code(j) ) cnt--; if( repeat_code(j+4) ) cnt--; flag=0; } for( ; j<=num; j+=10){ if( repeat_code(j) ) cnt++; if(j+4<=num){ if( repeat_code(j+4) ) cnt++; } else { flag=1; break; } if(j+5<=num){ if( repeat_code(j+5) ) cnt++; } else { flag=2; break; } } for(k=0; k<id; k+=2) if(opt[k]==num) opt[k+1]=cnt; } for(k=1; k<id; k+=2) printf("%d\n", opt[k]); return 0; }