Solution Notes: This problem is not too hard if we make the observation that 17N = 16N + N, and in binary 16N is just the binary representation of N followed by four digits of 0 (that is, N shifted right by four digits). We therefore add these two binary numbers to obtain our answer.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char num1[1010], num2[1010], s[1010], result[1010] = {0};
int i, L;
freopen ("times17.in", "r", stdin);
freopen ("times17.out", "w", stdout);
scanf ("%s", s);
sprintf (num1, "00000%s", s);
sprintf (num2, "0%s0000", s);
L = strlen(num1);
for (i=L-1; i>0; i--) {
result[i] += num1[i]-'0'+num2[i]-'0';
if (result[i] >= 2) { result[i] -= 2; result[i-1] += 1; }
}
i = 0;
if (result[0]==0) i = 1;
while (i < L)
printf ("%d", result[i++]);
printf ("\n");
return 0;
}