1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <limits.h> 5 6 #define MAX_INT_DIGIT 10 7 8 9 int * getSizeTable(); 10 char* int2str(const int); 11 int power(int, int); 12 int str2int(const char*); 13 14 #define ERROR -1 15 16 17 main() 18 { 19 int n = 1024; 20 char* s = int2str(n); 21 printf(" %d = \"%s\"\n", n , s ); 22 23 n = 0 ; 24 s = int2str(n); 25 printf(" %d = \"%s\"\n", n , s ); 26 27 n = 1234567890; 28 s = int2str(n); 29 printf(" %d = \"%s\"\n", n , s ); 30 31 n = str2int(s); 32 printf(" \"%s\" = %d \n", s , n ); 33 34 } 35 36 37 int power(int base, int n) 38 { 39 int result = ERROR; 40 int m = 0 ; 41 42 if(base <= 0) 43 { 44 return result; 45 } 46 47 if(n < 0) 48 { 49 return result; 50 } 51 52 result = 1 ; 53 54 for(; m < n; m++) 55 { 56 result *= base; 57 } 58 59 return result; 60 } 61 62 63 /** 64 * str2int 65 */ 66 int str2int(const char* string) 67 { 68 int result = 0; 69 70 int size = (int)strlen(string); 71 int index = 0; 72 int base = 10; 73 int convert= 0; 74 int n = 0; 75 76 /* 77 printf("%s size = %d\n", string ,size ); 78 */ 79 80 for(index = 0 ; index<= size -1 ; index++) 81 { 82 int c = string[index]; 83 if(c < ‘0‘ || c > ‘9‘) 84 { 85 convert = ERROR; 86 break; 87 } 88 int n = power(10, size -1 - index); 89 if(n == ERROR) 90 { 91 convert = ERROR; 92 break; 93 } 94 95 n = n * (string[index] - 48); 96 97 /* 98 n = n * (string[index] - ‘0‘); 99 */ 100 101 convert += n; 102 103 /* 104 printf("%c * pow(10, %d) = %d\n", string[index], (size - 1 - index), n ); 105 */ 106 } 107 108 result = convert; 109 110 return result; 111 112 } 113 114 115 char* int2str(const int n) 116 { 117 int absn = abs(n); 118 119 int digit = getDigit(absn) + 1 ; 120 121 char *number = (char *) malloc (digit * sizeof(char)); 122 123 int index = 0, difference = 0, realDigit = digit; 124 125 for(; index < digit ; index++ ) 126 { 127 realDigit = realDigit - 1; 128 int iDigit = 0; 129 if(index == 0) 130 { 131 iDigit = (absn/ power(10, realDigit )); 132 difference = absn % (power(10, realDigit)); 133 } 134 else 135 { 136 iDigit = (difference/ power(10, realDigit )); 137 difference = difference % (power(10, realDigit)); 138 } 139 140 char c = {iDigit + ‘0‘}; 141 char cc[2]; 142 cc[0] = c; 143 cc[1] = ‘\0‘; 144 number = strcat(number, cc); 145 146 } 147 148 return number; 149 } 150 151 152 int * getSizeTable() 153 { 154 int * sizeTable = sizeTable = (int *) malloc (MAX_INT_DIGIT * sizeof(int)); 155 156 int index = 0, digit = 10, sum = 0; 157 for( ; index < MAX_INT_DIGIT - 1 ; index++ ) 158 { 159 sum += power(digit, index) * 9; 160 *( sizeTable + index ) = sum; 161 } 162 163 *(sizeTable + MAX_INT_DIGIT -1 ) = INT_MAX; 164 165 return sizeTable; 166 167 } 168 169 170 int getDigit(int nInt) 171 { 172 int result = 0,min = 0, index = 0 ; 173 int * sizeTable = getSizeTable(); 174 for(; index < MAX_INT_DIGIT; index++) 175 { 176 if(nInt <= *(sizeTable + index)) 177 { 178 result = index; 179 break; 180 } 181 } 182 183 return result; 184 185 }
运行的结果是:
原文:http://www.cnblogs.com/jie1983/p/3539086.html