#include <string>
#include <stdlib.h>
#include <stdint.h>
#include <algorithm>
std::string i32_u10( int32_t n )
{
auto str = std::to_string( 0x7FFFFFFF & (n >> 1) );
char cy = n & 1;
for( int i = str.size()-1; i >= 0; -- i ){
int n = ((str[i] - '0') << 1) + cy;
str[i] = '0' + (n % 10);
cy = (n >= 10)? 1 : 0;
}
return ( cy != 0 )? "1" + str : str;
}
void test( int32_t n, std::string ans )
{
auto str = i32_u10( n );
printf( " %11ds %11uu 0x%08X => %10s %s\n", n, n, n, str.c_str(), (str == ans)? "OK" : "NG" );
}
int main(void)
{
test( 0, "0" );
test( 1, "1" );
test( 1234567, "1234567" );
test( 0x7FFFFFFF, "2147483647" );
test( 0x80000000, "2147483648" );
test( 0x80000001, "2147483649" );
test( 0xFFFFFFFF, "4294967295" );
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgpzdGQ6OnN0cmluZyBpMzJfdTEwKCBpbnQzMl90IG4gKQp7CglhdXRvIHN0ciA9IHN0ZDo6dG9fc3RyaW5nKCAweDdGRkZGRkZGICYgKG4gPj4gMSkgKTsKCWNoYXIgY3kgPSBuICYgMTsKCWZvciggaW50IGkgPSBzdHIuc2l6ZSgpLTE7IGkgPj0gMDsgLS0gaSApewoJCWludCBuID0gKChzdHJbaV0gLSAnMCcpIDw8IDEpICsgY3k7CgkJc3RyW2ldID0gJzAnICsgKG4gJSAxMCk7CgkJY3kgPSAobiA+PSAxMCk/IDEgOiAwOwoJfQoJcmV0dXJuICggY3kgIT0gMCApPyAiMSIgKyBzdHIgOiBzdHI7Cn0KCnZvaWQgdGVzdCggaW50MzJfdCBuLCBzdGQ6OnN0cmluZyBhbnMgKQp7CglhdXRvIHN0ciA9IGkzMl91MTAoIG4gKTsKCXByaW50ZiggIiAlMTFkcyAlMTF1dSAgMHglMDhYICA9PiAgJTEwcyAgJXNcbiIsIG4sIG4sIG4sIHN0ci5jX3N0cigpLCAoc3RyID09IGFucyk/ICJPSyIgOiAiTkciICk7Cn0KCmludCBtYWluKHZvaWQpCnsKCXRlc3QoIDAsICIwIiApOwoJdGVzdCggMSwgIjEiICk7Cgl0ZXN0KCAxMjM0NTY3LCAiMTIzNDU2NyIgKTsKCXRlc3QoIDB4N0ZGRkZGRkYsICIyMTQ3NDgzNjQ3IiApOwoJdGVzdCggMHg4MDAwMDAwMCwgIjIxNDc0ODM2NDgiICk7Cgl0ZXN0KCAweDgwMDAwMDAxLCAiMjE0NzQ4MzY0OSIgKTsKCXRlc3QoIDB4RkZGRkZGRkYsICI0Mjk0OTY3Mjk1IiApOwoKCXJldHVybiAwOwp9Cg==