//itoavoid myItoa(int value, char str[60], int base){ int i=0; while(pow(base,i)<=value){ i++; } int len = --i; str[len+1] = '\0'; char c[1]; while(value>=0 && i>=0){ double dp = pow(base,i);//如果是用int p = ((int)pow(base,i)),pow(5,2)=25.0000会变成24! int p = (int)dp; //printf("value=%d p=%d ",value,p); int div = value/p; //as base<=10, so intValue must be less than 10 value = value%p; //printf("div=%d mod=%d\n",div,value); //convert single int to char char c[1]; sprintf(c,"%d",div); str[len-i] = c[0]; i--; } }
第二个while里的逻辑冗余太多,应该是这样:
void myItoa(int value, char str[12], int base){ int i=0; while(pow(base,i)<=value){ i++; } int len = --i; str[len+1] = '\0'; char c[1]; while(value>=0 && i>=0){ int tmp = value % base; value /= base; //convert single int to char str[len-i] = tmp+'0'; i--; } }