#include <string>
#include <cstdlib>
long firstDigitToEnd( long n) {
bool neg = ( n < 0 ) ; // Preserve signed-ness.
if ( neg) { n = labs ( n) ; } // Obtain absolute value, for convenience.
std:: string num = std:: to_string ( n) ; // Convert number to string.
char first = num[ 0 ] ; // Obtain first digit.
num.erase ( 0 , 1 ) ; // Erase first digit, shift rest forwards.
num.push_back ( first) ; // Append first digit to end.
// And we're done. Convert string back to number, restore signed-ness.
return ( neg ? - ( std:: stol ( num) ) : std:: stol ( num) ) ;
}
// -----
// Testing code.
#include <iostream>
#include <limits>
void readCin( long & l) ;
int main( ) {
long n = 0 ;
do {
if ( n) {
std:: cout << "Result: " << firstDigitToEnd( n) << std:: endl ;
}
std:: cout << "Input number, or 0 to exit: " ;
readCin( n) ;
} while ( n) ;
std:: cout << "...And we're gone." << std:: endl ;
}
// Read a number, or clear the buffer if non-number is entered.
void readCin( long & l) {
using std:: cin ;
cin >> l;
cin .ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , '\n ' ) ;
if ( cin .fail ( ) ) {
cin .clear ( ) ;
cin .ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , '\n ' ) ;
l = 0 ;
}
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdGRsaWI+Cgpsb25nIGZpcnN0RGlnaXRUb0VuZChsb25nIG4pIHsKICAgIGJvb2wgbmVnID0gKG4gPCAwKTsgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBzaWduZWQtbmVzcy4KICAgIGlmIChuZWcpIHsgbiA9IGxhYnMobik7IH0gICAgICAgICAgICAvLyBPYnRhaW4gYWJzb2x1dGUgdmFsdWUsIGZvciBjb252ZW5pZW5jZS4KCiAgICBzdGQ6OnN0cmluZyBudW0gPSBzdGQ6OnRvX3N0cmluZyhuKTsgLy8gQ29udmVydCBudW1iZXIgdG8gc3RyaW5nLgoKICAgIGNoYXIgZmlyc3QgPSBudW1bMF07ICAgICAgICAgICAgICAgICAvLyBPYnRhaW4gZmlyc3QgZGlnaXQuCiAgICBudW0uZXJhc2UoMCwgMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gRXJhc2UgZmlyc3QgZGlnaXQsIHNoaWZ0IHJlc3QgZm9yd2FyZHMuCiAgICBudW0ucHVzaF9iYWNrKGZpcnN0KTsgICAgICAgICAgICAgICAgLy8gQXBwZW5kIGZpcnN0IGRpZ2l0IHRvIGVuZC4KCiAgICAvLyBBbmQgd2UncmUgZG9uZS4gIENvbnZlcnQgc3RyaW5nIGJhY2sgdG8gbnVtYmVyLCByZXN0b3JlIHNpZ25lZC1uZXNzLgogICAgcmV0dXJuIChuZWcgPyAtKHN0ZDo6c3RvbChudW0pKSA6IHN0ZDo6c3RvbChudW0pKTsKfQoKLy8gLS0tLS0KCi8vIFRlc3RpbmcgY29kZS4KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGxpbWl0cz4KCnZvaWQgcmVhZENpbihsb25nJiBsKTsKCmludCBtYWluKCkgewogICAgbG9uZyBuID0gMDsKCiAgICBkbyB7CiAgICAgICAgaWYgKG4pIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJSZXN1bHQ6ICIgPDwgZmlyc3REaWdpdFRvRW5kKG4pIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CgogICAgICAgIHN0ZDo6Y291dCA8PCAiSW5wdXQgbnVtYmVyLCBvciAwIHRvIGV4aXQ6ICI7CiAgICAgICAgcmVhZENpbihuKTsKICAgIH0gd2hpbGUgKG4pOwoKICAgIHN0ZDo6Y291dCA8PCAiLi4uQW5kIHdlJ3JlIGdvbmUuIiA8PCBzdGQ6OmVuZGw7Cn0KCi8vIFJlYWQgYSBudW1iZXIsIG9yIGNsZWFyIHRoZSBidWZmZXIgaWYgbm9uLW51bWJlciBpcyBlbnRlcmVkLgp2b2lkIHJlYWRDaW4obG9uZyYgbCkgewogICAgdXNpbmcgc3RkOjpjaW47CgogICAgY2luID4+IGw7CiAgICBjaW4uaWdub3JlKHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpzdHJlYW1zaXplPjo6bWF4KCksICdcbicpOwoKICAgIGlmIChjaW4uZmFpbCgpKSB7CiAgICAgICAgY2luLmNsZWFyKCk7CiAgICAgICAgY2luLmlnbm9yZShzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c3RyZWFtc2l6ZT46Om1heCgpLCAnXG4nKTsKICAgICAgICBsID0gMDsKICAgIH0KfQ==