ACM模板(5)整數相關計算

//二進制中1的個數

//把整數轉化爲字符串

//把字符串轉化爲整數

//二進制中1的個數
int hammingWeight(int n) {
	int ans = 0;
	while (n)
	{
		n ^= (n&(-n));
		ans++;
	}
	return ans;
}

//把整數轉化爲字符串
char* itoa(int num,char* str,int radix)  //copy from 百度百科
{/*索引表*/
    char index[]="0123456789ABCDEF";
    unsigned unum;/*中間變量*/
    int i=0,j,k;
    /*確定unum的值*/
    if(radix==10&&num<0)/*十進制負數*/
    {
        unum=(unsigned)-num;
        str[i++]='-';
    }
    else unum=(unsigned)num;/*其他情況*/
    /*轉換*/
    do{
        str[i++]=index[unum%(unsigned)radix];
        unum/=radix;
       }while(unum);
    str[i]='\0';
    /*逆序*/
    if(str[0]=='-') k=1;/*十進制負數*/
    else k=0;     
    for(j=k;j<=(i-1)/2;j++)
    {   
        char temp;
        temp=str[j];
        str[j]=str[i-1+k-j];
        str[i-1+k-j]=temp;
    }
    return str;
}
//把字符串轉化爲整數
int atoi(const char *nptr,int radix) //copy from somebody
{        
        while ( isspace((int)(unsigned char)*nptr) )  ++nptr;/* skip whitespace */
        int c = (int)(unsigned char)*nptr++;
        int sign = c;           /* save sign indication */
        if (c == '-' || c == '+')  c = (int)(unsigned char)*nptr++;    /* skip sign */
        int total = 0;
        while (isdigit(c)) {
            total = radix * total + (c - '0');     /* accumulate digit */
            c = (int)(unsigned char)*nptr++;    /* get next char */
        }
        if (sign == '-')   return -total;
        else  return total;   /* return result, negated if necessary */
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章