/home/toolbox/public_html/solutions/6/636/s.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/types.h>
4 #include <sys/stat.h>
5 #include <fcntl.h>
6 #include <stdint.h>
7 #include <math.h>
8 #include <stdlib.h>
9
10 #define TRUE (1 == 1)
11 #define FALSE (1 != 1)
12
13 #define DEBUG if (FALSE)
14
15 #define BIG unsigned long long int
16 #define STOPBASE 100
17
18 /*
19 * Author: Isaac Traxler
20 * Date: 2013-02-08
21 * Purpose: fun
22 * Problem: 636 Squares
23 */
24
25 /*
26 * This template reads data until a terminating value is reached.
27 */
28
29 BIG inp;
30 BIG num;
31
32
33 void init()
34 {
35 /* FUNCTION init */
36 } /* FUNCTION init */
37
38 void dump()
39 {
40 /* FUNCTION dump */
41 } /* FUNCTION dump */
42
43 int getInput()
44 {
45 /* FUNCTION getInput */
46 int dataReadFlag;
47
48 scanf(" %lld ", &inp);
49 dataReadFlag = 0 != inp;
50 return (dataReadFlag);
51 } /* FUNCTION getInput */
52
53 int scanDigit(BIG inp)
54 {
55 /* FUNCTION scanDigit */
56 BIG tmp;
57 int dig = 1;
58 int td;
59
60 tmp = inp;
61 while ((dig < 9) && (0 < tmp))
62 {
63 /* while */
64 td = tmp % 10;
65 tmp = tmp / 10;
66 if (td > dig)
67 {
68 dig = td;
69 }
70 } /* while */
71 return dig;
72 } /* FUNCTION scanDigit */
73
74 BIG cnvrt(BIG inp, int base)
75 {
76 /* FUNCTION cnvrt */
77 BIG tmp;
78 BIG tot = 0;
79 BIG mult = 1;
80
81 tmp = inp;
82 while (0 < tmp)
83 {
84 /* while */
85 tot = tot + (mult * (tmp % 10));
86 tmp = tmp / 10;
87 mult = mult * base;
88 } /* while */
89 return tot;
90 } /* FUNCTION cnvrt */
91
92 int isNotSquare(BIG num)
93 {
94 /* FUNCTION isNotSquare */
95 BIG tmp;
96 int notSquare;
97
98 tmp = (BIG) sqrt((double) num);
99 DEBUG printf("%lld -> %lld\n", num, tmp);
100 notSquare = ((tmp * tmp) != num);
101 return notSquare;
102 } /* FUNCTION isNotSquare */
103
104 void process()
105 {
106 /* FUNCTION process */
107 int i;
108 int notFound = TRUE;
109 int startBase;
110
111 /* search for the base */
112 /* determine min base */
113 startBase = scanDigit(inp) + 1;
114 DEBUG printf("start=%d\n", startBase);
115 for (i=startBase; (STOPBASE > i) && (notFound); i++)
116 {
117 /* for each possible base */
118 num = cnvrt(inp, i);
119 notFound = isNotSquare(num);
120 DEBUG printf("%lld (%d) is %lld (10)\n", inp, i, num);
121 } /* for each possible base */
122 DEBUG printf("%lld\n", inp);
123 printf("%lld ", inp);
124 printf("%d\n", i - 1);
125 } /* FUNCTION process */
126
127 int main ()
128 {
129 /* main */
130 int moreToDo;
131
132 init();
133 moreToDo = getInput();
134 while (moreToDo)
135 {
136 /* while */
137 process();
138 moreToDo = getInput();
139 } /* while */
140
141 return EXIT_SUCCESS;
142 } /* main */
143