对于正整数 A,计算它有几个因数是回文数。
回文数就是从左往右读与从右往左读一模一样的数。例如:666,292,4 都是回文数,而 321 不是。
第一行一个整数 T,表示共有 T 组数据,每组数据格式如下:
一行一个整数 A
共 T 行,每行对应一组数据的答案
4
6
10
144
242
4
3
7
6
第 1 组数据有 4 个回文因数:1,2,3,6;
第 2 组数据有 3 个回文因数:1,2,5;
第 2 组数据有 7 个回文因数:1,2,3,4,6,8,9;
第 2 组数据有 6 个回文因数:1,2,11,22,121,242;
数据范围 对于 50% 的数据,1≤A≤1000;
对于 100% 的数据,1≤A≤1010。
50分TLE代码:
#include <bits/stdc++.h>
using namespace std;
long long n, a, sum;
bool flip(long long c){
long long cc = c;
int p, q, k;
for(int i = 1; i < ((int)log10((double)c) + 1) / 2 + 1; i++){
p = cc / (int)pow(10, i - 1) % 10;
k = (int)log10((double)c) + 2 - i;
q = cc / (int)pow(10, k - 1) % 10;
cc -= p * (int)pow(10, i - 1) + q * (int)pow(10, k - 1);
cc += q * (int)pow(10, i - 1) + p * (int)pow(10, k - 1);
}
return cc == c;
}
int main(){
std::ios::sync_with_stdio(false);
cin >> n;
for(int i = 0; i < n; i++){
sum = 0;
cin >> a;
for(int i = 1; i <= a; i++){
if(a % i == 0 && flip(i)){
sum++;
}
}
cout << sum << endl;
}
return 0;
}
我这肯定T