PAT-BASIC1091——N-自守数
我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/1071785664454127616
题目描述:
知识点:字符串
思路:用字符串形式保存K和NK^2
由于要比较K和NK^2的末尾几位数是否相等,字符串形式无疑是最好的存储数据形式。
时间复杂度是O(M * N * k),其中k为输入数字的位数。空间复杂度是O(1)。
C++代码:
#include<iostream>
#include<cstring>
int main(){
int M;
scanf("%d", &M);
for(int i = 0; i < M; i++){
int num;
scanf("%d", &num);
char input[4];
sprintf(input, "%d", num);
int N = 1;
for(; N < 10; N++){
int result = num * num * N;
char output[8];
sprintf(output, "%d", result);
bool flag = true;
if(strlen(output) >= strlen(input)){
for(int k = strlen(output) - strlen(input); k < strlen(output); k++){
if(output[k] != input[k - (strlen(output) - strlen(input))]){
flag = false;
break;
}
}
}else{
flag = false;
}
if(flag){
printf("%d %d\n", N, result);
break;
}
}
if(N >= 10){
printf("No\n");
}
}
}
C++解题报告: