Convert numbers to symbols without string or char literals Read infinitely from stdin, and convert every number to the corresponding symbol on a US qwerty keyboard. 

No string or character literals anywhere are permitted.

E.g. if the input is 117758326, the output is !!&amp;&amp;%*#@^.

Letters and symbols that aren't on numbers are left alone; 11g2;;'1g2311hh21930 turns into !!g@;;'!g@#!!hh@!(#)

Shortest code, in bytes, wins.

For those who don't have a US qwerty keyboard, use the following as a guide:

1 -&gt; !
2 -&gt; @
3 -&gt; #
4 -&gt; $
5 -&gt; %
6 -&gt; ^
7 -&gt; &amp;
8 -&gt; *
9 -&gt; (
0 -&gt; )
C, 90 bytes

The line between a character and an integer literal is a very fine one in C.

a[]={8,0,31,2,3,4,61,5,9,7};main(d){for(;~(d=getchar());)putchar(d&gt;47&amp;d&lt;58?a[d-48]+33:d);}