secondo me dovresti rivedere un po' il tuo codice...
ti ridà sempre zero perchè:
codice:
    int binary = arg1 % 2;
    while( binary )
perchè la prima espressione ti da il resto della divisione di 2 (che per un numero pari è 0), perciò nemmeno entra nel ciclo while...
Ma anche se provassi con un numero dispari mi sa che le cose non vanno come credi...
Poi alla fine fai il controllo con un char (per la chiusura di stringhe)...ma non dovresti definire da qualche parte che stai lavorando con stringhe?....altrimenti fai solo delle somme tra 1 e 0 (sempre se riesci)...giusto?

cmq, mi pare ci sia una libreria in C++ che ti permetta di lavorare facilmente con i valori binari:

codice:
#include <iostream>
#include <bitset>

int main(){
    bitset<20> binario(938);
    cout << binario << endl;
    return 0;
}
per gli ottali e gli esadecimali, ci sono poi i manipolatori per gli stream...
Certo, se il tuo scopo è scriverti l'algoritmo di conversione queste non sono le strade che devi seguire, cmq spero d'averti aiutato.

ciauz