codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
// Increment a very large unsigned number by one #include <stdio.h> #include <string.h> void incrementUnsignedIntByOneAndPrint(const char *s) { // Sanity checks like s is not null etc int i; int len = strlen(s); char *inc = malloc(len + 2); inc[len] = inc[len+1] = '\0'; for(i = 0; i <= len; ++i) { int d = i; // Sanity checks like s[i] is a digis (isnum from ctype) while(s[i] == '9') i++; if('\0' == s[i]) { int offset = 0; // increment last digit and add n9s zeros if(0 == d) inc[offset++] = '1'; else ++inc[d-1]; if(d < i) memset(inc+offset+d, '0', i-d); } else { // copy all numbers if(d < i) memset(inc+d, '9', i-d); inc[i] = s[i]; } } printf("Input = %s\n", s); printf("Output = %s\n", inc); printf("\n"); } int main() { incrementUnsignedIntByOneAndPrint("0"); incrementUnsignedIntByOneAndPrint("1"); incrementUnsignedIntByOneAndPrint("9"); incrementUnsignedIntByOneAndPrint("100"); incrementUnsignedIntByOneAndPrint("101"); incrementUnsignedIntByOneAndPrint("109"); incrementUnsignedIntByOneAndPrint("199"); incrementUnsignedIntByOneAndPrint("999"); incrementUnsignedIntByOneAndPrint("9999999999999999999999999999"); incrementUnsignedIntByOneAndPrint("9999999999999999997999999999"); incrementUnsignedIntByOneAndPrint("9991999993999999999799999999"); incrementUnsignedIntByOneAndPrint("1111111111111111111111111111"); incrementUnsignedIntByOneAndPrint("0000000000000000000000000000"); return 0; }
Private
[
?
]
Run code
Submit