PAT B1091 N-自守数

之所以提到这道题,不是因为这道题难。是因为在做这道题的时候,犯了一个低级的错误。
注意,题中给出的“No”,“o”是小写,我写的时候,写成了大写“O”。反复确认了我写的代码没有逻辑错误,仔细对照题目才发现这个问题。

#include 
#include 
#include 
using namespace std;
const int maxn = 101;
int a[maxn] = {0};
bool compare(int a, int b){//a的后几位是否与b相等
    while (true) {
        if(a % 10 != b % 10){
            return false;
        }else{
            a = a / 10;
            b = b / 10;
            if(a == 0 || b == 0){
                break;
            }
        }
    }
    return true;
}
int main(){
    int M, num;
    scanf("%d", &M);
    for (int i = 0; i < M; i++) {
        scanf("%d", &num);
        a[i] = num;
    }
    for(int i = 0; i < M; i++){
        int result;
        int j;
        for(j = 1; j < 10; j++){
            result = a[i] * a[i] * j;
            if(compare(result, a[i])){
                printf("%d %d\n", j, result);
                break;
            }
        }
        if(j >= 10){
            printf("NO\n");
        }
    }
    return 0;
}

你可能感兴趣的:(PAT B1091 N-自守数)