I float sono soggetti al round error cioè perdono un po' di precisione via via che si eseguono calcoli. Per esempio 0.1 + 0.1 ... (per 10 volte) non farà 1 ma 0.9999999.
Per cui conviene evitare di usare nd.
La soluzione è molto semplice: nd viene usato per calcolare il resto tra n e 10 ma basterebbe usare l'operatore modulo (%)! Inoltre la condizione del while è leggermente sbagliata, in quanto basterebbe che n > 0 perché il resto funziona anche con numeri compresi tra 0 e 9.
Ho scritto questo un po' di tempo fa, dovrebbe funzionare.
Edit: mi hanno precedutocodice:string int_to_str( int n ) { if(!n) return "0"; string s; string tmp; while ( n > 0 ) { s += n % 10 + 48; n /= 10; } tmp = s; for (int i = s.size() - 1; i >= 0; i-- ) s[i]= tmp[s.size() - i - 1]; return s; }![]()