洛谷-求同构数的个数-NOIP2013提高组复赛
题目描述 Description
所谓同构数是指这样的数,即它出现在它的平方数的右端。例如,5的平方是25 (即5×5=25),5是25右端的数,那么5就是同构数。又如,25的平方是625(即25×25=625),同理25也是同构数。找出通过键盘输入的两个正整数N和M之间同构数的个数。
输入输出格式 Input/output
输入格式:
一行,任意给定的两个正整数N,M
输出格式:
一个正整数,表示[N,M]之间同构数的个数。
一行,任意给定的两个正整数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\n",ans); 29 return 0; 30 }
我不怕千万人阻挡,只怕自己投降…