asdfslw 发表于 2010-5-16 13:30:20

/*
输入: n>0
输出: k*(k+1)=n 的解
      如果无解,则返回0
*/
typedef unsigned long U32;
U32 calculate(U32 n)
{
        U32 left = 1, right = 0x10000, m, mid;
        if (n==1)return 0; /* 无解 */
        if (n==2)return 1;
        while(left+1<right)
        {
                mid = (left + right) / 2;
                m = mid*(mid+1);
                if (m==n)       return mid; /* 有解 */
                else if (m<n)   left = mid;
                else          right = mid;
        }
        return 0; /* 无解 */
}
页: 1 [2]
查看完整版本: 快速求k的值,k(k+1)=N