先看题目
本题的关键点在于判断计算出的数末尾与输入的数K相等。
自己的思路:
1.取余数判断
先获取k的位数n;0-9是一位;10-99是二位;100-999是三位。
判断方法:两个数依次除以10*n;比较计算两个结果是否相等。
比如123与23。(23%10)==(123%10)
(23%100)==(123%100)
#include <iostream>
using namespace std;
int main()
{
int i;
cin >> i;
//i--先取值后执行
while (i--)
{
int k,m,j;
cin >> k;
int n = 0;
int sum = 0;
//首先得到k是几位数
if (k < 10)
{
n = 1;
}
if ((k >= 10) && (k < 100))
{
n = 2;
}
if ((k >= 100) && (k < 1000))
{
n = 3;
}
for (j = 0; j <= 9; j++)
{
m = k * k * j;
//k为原始的数据,m为计算后的数据,只需比较m和k的相关内容就可以得出结论
//(k%(10*p)) (m%(10*p))
for (int p = 1; p <= n; p++)
{
if ((k % (10 * p)) == (m % (10 * p)))
sum++;
}
if (sum == n)
break;
}
if (sum == n)
printf("%d %d\n", j, m);
else
printf("No\n");
}
return 0;
}
部分正确的原因:不能判断整十或整百的数。
测试结果:
比较好的思路,参考这个连接