/* Original ltostr() was hosed. Fixed version: */
static const char B36TAB[] =
{
'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
};
#include <stdlib.h>
#include <string.h>
/* ltostr is from snippets (I fixed the broken bit). */
char *ltostr(long long num, char *string, size_t max_chars, unsigned
base)
{
char remainder;
int sign = 0;
if (base < 2 || base > 36)
return ((void *) 0);
if (num < 0) {
sign = 1;
num = -num;
}
if (num == 0) /* bugbug:drc formerly wrong result
here... */
return "0";
string[--max_chars] = '\0';
for (max_chars--; max_chars > sign && num != 0; max_chars--) {
remainder = (char) (num % base);
string[max_chars] = B36TAB[remainder];
num /= base;
}
if (sign)
string[--max_chars] = '-';
if (max_chars > 0)
memset(string, ' ', max_chars + 1);
return string + max_chars;
}
int ispal(const char *start)
{
const char *end = start + strlen(start) - 1;
while (end > start) {
if (*start != *end) {
return 0;
}
start++;
end--;
}
return 1;
}
#include <stdio.h>
static char string[50] =
{0};
int main(void)
{
long long index;
unsigned base;
for (index = 0; index < 4000000000; index++) {
for (base = 2; base < 37; base++) {
long long val = index;
char *p = ltostr(val, string, sizeof string,
base);
if (isspace(*p))
p++;
if (ispal(p)) {
printf("%llu = %s is a palindrome in base %u\n", val,
p, base);
}
}
}
return 0;
}
/*
Sample output:
....
2290134 = E656E is a palindrome in base 20
2290141 = 84548 is a palindrome in base 23
2290156 = 1IEI1 is a palindrome in base 35
2290187 = 9H1H9 is a palindrome in base 22
2290220 = 36Q63 is a palindrome in base 29
2290252 = 11022100122011 is a palindrome in base 3
2290293 = 50805 is a palindrome in base 26
2290322 = 2OOO2 is a palindrome in base 30
2290353 = 925529 is a palindrome in base 12
2290378 = 4270724 is a palindrome in base 9
2290391 = HAHAH is a palindrome in base 19
2290460 = BG6GB is a palindrome in base 21
2290499 = 2ERE2 is a palindrome in base 31
2290501 = 1D3D1 is a palindrome in base 36
2290530 = 5LEL5 is a palindrome in base 25
2290534 = E666E is a palindrome in base 20
2290627 = 3K9K3 is a palindrome in base 28
2290641 = 1000101111001111010001 is a palindrome in base 2
2290658 = 20233033202 is a palindrome in base 4
2290670 = 84648 is a palindrome in base 23
2290671 = 9H2H9 is a palindrome in base 22
2290686 = 6LGL6 is a palindrome in base 24
2290735 = 13EE31 is a palindrome in base 18
2290738 = 48A84 is a palindrome in base 27
2290752 = HAIAH is a palindrome in base 19
2290850 = 25T52 is a palindrome in base 32
2290853 = 1O9O1 is a palindrome in base 34
2290901 = BG7GB is a palindrome in base 21
2290922 = 2290922 is a palindrome in base 10
....
*/