Dual Palindromes

/*
ID: fykalv3
LANG: C
TASK: dualpal
 */

/*
   遍历2到10逐个转换然后判断是不是回文数,就有个mark的变量记录是不是大于两种情况下的回文数
 */
#include <stdio.h>
/*
   函数的功能就是转换然后再判断是不是回文数
 */
int pd(int num)
{
	int i, j, m, k, p, q, flag;
	int les[100];
	k = 0;
	for (i = 2; i <= 10; i++) {
		flag = 1;
		j = 0;
		m = num;
		while (m) {
			les[j++] = m % i;
			m /= i;
		}
		for (p = 0, q = j-1; p <= q && flag; p++, q--) {
			if (les[p] != les[q]) 
				flag = 0;
		}
		if (flag) //  这里是mark的作用
			k++;
	}
	if (k >= 2)  // 这里看出来mark的作用了
		return 1;
	else
		return 0;
}

int main()
{
	FILE *fin = fopen("dualpal.in", "r");
	FILE *fout = fopen("dualpal.out", "w");
	int N, S, l, sum = 0;
	fscanf(fin, "%d %d", &N, &S);
	for (l = S + 1; sum < N; l++) {
		if (pd(l))  {
			fprintf(fout, "%d\n", l);
			sum++;
		}
	}
	fclose(fin);
	fclose(fout);
	return 0;
}

你可能感兴趣的:(c,算法,USACO)