求助站外题
查看原帖
求助站外题
670355
Nuclear_Fish_cyq楼主2022/10/30 17:25

回文因数

时间限制:1000ms

内存限制:256mb


题目描述

对于正整数 AA,计算它有几个因数是回文数。

回文数就是从左往右读与从右往左读一模一样的数。例如:66666629229244 都是回文数,而 321321 不是。


输入格式

第一行一个整数 TT,表示共有 TT 组数据,每组数据格式如下:

一行一个整数 AA


输出格式

TT 行,每行对应一组数据的答案

测试样例

输入样例 #1

4
6
10
144
242

输出样例 #1

4
3
7
6

样例解释

样例一说明

11 组数据有 44 个回文因数:1,2,3,61,2,3,6

22 组数据有 33 个回文因数:1,2,51,2,5

22 组数据有 77 个回文因数:1,2,3,4,6,8,91,2,3,4,6,8,9

22 组数据有 66 个回文因数:1,2,11,22,121,2421,2,11,22,121,242

数据范围 对于 50%50\% 的数据,1A10001\leq A\leq1000

对于 100%100\% 的数据,1A10101\leq A\leq10^{10}




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

2022/10/30 17:25
加载中...