题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/1071785664454127616
AC代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;
bool isPrime(long long n){
float n_sqrt;
if(n==2||n==3) return true;
if(n%6!=1&&n%6!=5) return false;
n_sqrt=floor(sqrt((float)n));
for(int i=5;i<=n_sqrt;i+=6){
if(n%i==0 | n%(i+2)==0)
return false;
}
return true;
}
const int maxn=1010;
int a[maxn];
//返回n的余数
int remain(int n,int wei){
if(wei==1){
return n%10;
}
else if(wei==2){
int shi_1=n/10%10;
int ge_1=n%10;
return shi_1*10+ge_1;
}
else if(wei==3){
int bai_2=n/100%10;
int shi_2=n/10%10;
int ge_2=n%10;
return bai_2*100+shi_2*10+ge_2;
}
}
int main(){
int M;
int tmp;
scanf("%d",&M);
for(int i=0;i<M;i++){
scanf("%d",&tmp);
int weishu;
if(tmp/100){//三位数
weishu=3;
}
else if(!(tmp/10)){//一位数
weishu=1;
}
else//两位数
weishu=2;
int j;
for(j=1;j<10;j++){
int result=remain(j*tmp*tmp,weishu);
if(result==tmp){
printf("%d %d\n",j,j*tmp*tmp);
break;
}
}
if(j==10)
printf("No\n");
}
}
二刷:
#include <iostream>
#include <cstdio>
using namespace std;
int quyu(int x,int y){//x为K,y为乘以N后的数
if(x/10==0){//x<10
return y%10;//一开始,写成return x,测试点1出错,
//改成return y,得5分
//最后才做对
}
else if(x/100==0){//10=<x<100
int ge=y%10;
y/=10;
int shi=y%10;
int ret=shi*10+ge;
return ret;
}
else{//x>=100
int ge=y%10;
y/=10;
int shi=y%10;
y/=10;
int bai=y%10;
int ret=bai*100+shi*10+ge;
return ret;
}
}
int main(){
int N;
scanf("%d",&N);
while(N--){
int tmp;
scanf("%d",&tmp);
int i;
for(i=1;i<10;i++){
int pro=tmp*tmp*i;
int tp=quyu(tmp,pro);
if(tp==tmp){
break;
}
}
if(i<10){
printf("%d %d\n",i,tmp*tmp*i);
}
else{
printf("No\n");
}
}
}