//itoa
void 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--;
}
}