洛谷-求同构数的个数-NOIP2013提高组复赛

题目描述 Description

所谓同构数是指这样的数,即它出现在它的平方数的右端。例如,5的平方是25 (即5×5=25),5是25右端的数,那么5就是同构数。又如,25的平方是625(即25×25=625),同理25也是同构数。找出通过键盘输入的两个正整数N和M之间同构数的个数。
 输入输出格式 Input/output
输入格式:
一行,任意给定的两个正整数N,M
输出格式:
一个正整数,表示[N,M]之间同构数的个数。
 输入输出样例 Sample input/output
样例测试点#1

输入样例:

4 10

输出样例

2

说明 description

对于100%的数据:(0<N<M≤10000)
 
思路:这题较为简单,循环区间中的每个数,平方后保留后几位(根据数的位数决定),判断相同计数器++即可;
 
代码如下:
 1 #include <stdio.h>
 2 int fun(int a)//传过来一个数,传出10的位数次方  
 3 {
 4     int i,k=1;
 5     int ans=0;
 6     while(a>0)//统计位数 
 7     {
 8         ans++;
 9         a=a/10;
10     }    
11     for(i=0;i<ans;i++)//10的位数次方 
12     {
13         k=k*10;
14     }
15     return k;
16 }
17 int main()
18 {
19     int ans=0,i;
20     int a,b;
21     int p;
22     scanf("%d%d",&a,&b);
23     for(i=a;i<=b;i++)
24     {
25         p=i*i;
26         if(i==p%fun(i)) ans++;
27     }
28     printf("%d
",ans);
29     return 0;
30 }
原文地址:https://www.cnblogs.com/geek-007/p/5171112.html