问题描述
找出一个N自守数,N-自守数满足的要求如题目所示。输出N-自守数的N值和该数字,用空格间隔开。
题目分析
由于N<10,所以我们完全可以通过遍历N的方式找到正确的N值。但我们要怎样得到NK^2后面的几个数字呢?
我们的做法是对输入数字judge的大小进行判断:
1.如果num<10,则NK^2 % div就可以得到最后的一个数字(div=10)
2.如果num<100,则NK^2 % div可以得到最后两个数字(div=100)
3.如果num<1000,则NK^2 % div可以得到最后三个数字(div=1000)
因此判断条件就是:judge*judge*N %div == judge
如果在N<10的范围内找不到这样的数,我们输出No
代码
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int m;//输入的数字数目
cin>>m;
int judge,div;
for(int i = 0;i < m; i++)
{
int flag = 0;
cin>>judge;
if(judge < 10)
div = 10;
else if(judge < 100)
div = 100;
else
div = 1000;
for(int i = 1;i < 10;i++)
{
if((judge*judge*i) % div == judge)
{
cout<<i<<" "<<judge * judge * i<<endl;
flag = 1;
break;
}
}
if(!flag)
cout<<"No"<<endl;
}
return 0;
}
答题用时9min
Q91——finish√