例如:我用六个字母来代替,两个字母为一个16进制数
kr pq mn(三个数)
另有两个变量x,y
当x+1时,p+4,
当y+1时,m+1,
当m满16时,向q进位,q+1,当q满16时,向p进位,p+1.
当p满16时,向r进位,r+1,当r满16时,向k进位,k+1,
减法亦然。
当x,y变化时,这三个数是这样变的啊~~求算法啊!!!

解决方案 »

  1.   

    不就是一个24位的数吗?
    unsigned long temp;
    p+4 --> temp+0x400
    m+1 --> temp+0x10最后再把temp拆成3个8位。
      

  2.   

    输入x,y;
    求出相应p,m;
    源数值kr pq mn,则对于该p,m有新数值(用大写表示):
    N=n;
    M=m%16;
    Q=(q+m/16)%16;
    P=(p+(q+m/16)/16)%16
    ...
      

  3.   

    See the sample below, FYI: http://codeproject.com/cpp/baseconvert.asp
      

  4.   

    楼主:准备给我多少分啊?呵呵#include "stdafx.h"
    #include "stdio.h"/*
    例如:我用六个字母来代替,两个字母为一个16进制数
    kr pq mn(三个数)
    另有两个变量x,y
    当x+1时,p+4,
    当y+1时,m+1,
    当m满16时,向q进位,q+1,当q满16时,向p进位,p+1.
    当p满16时,向r进位,r+1,当r满16时,向k进位,k+1,
    减法亦然。
    当x,y变化时,这三个数是这样变的啊~~求算法啊!!!
    */class UDefData
    {
    private:
    //m_szData[0]保存kr
    //m_szData[1]保存pq
    //m_szData[2]保存mn
    unsigned char m_szData[3];
    public:
    UDefData();
    ~UDefData(); void GetData (unsigned char* szResult);
    void SetData(unsigned short x,unsigned short y);
    };UDefData::UDefData()
    {
    m_szData[0] = 0;
    m_szData[1] = 0;
    m_szData[2] = 0;
    }UDefData::~UDefData()
    {
    }void UDefData::GetData (unsigned char* szResult)
    {
    szResult[0] = m_szData[0];
    szResult[1] = m_szData[1];
    szResult[2] = m_szData[2];
    }void UDefData::SetData(unsigned short x,unsigned short y)
    {
    //当y+1时,m+1,也就是m_szData[2]加16
    m_szData[2] = y*16; //当x+1时,p+4,也就是m_szData[1]加4*16,还要加上m_szData[2]可能的进位
    m_szData[1] = ((y*16)>>8) + x*4*16; //只用保存m_szData[1]可能产生的进位
    m_szData[0] = (((y*16)>>8) + x*4*16)>>8;
    }
    void main()
    {
    UDefData data;
    unsigned char szResult[3]; data.SetData (1,1);
    data.GetData (szResult); printf("%02x %02x %02x\n",szResult[0],szResult[1],szResult[2]);
    }/*
    程序输出结果:00 40 10
    */
      

  5.   

    因为有这样一种关系unsigned long nValue;nValue = y*16 + x*4*16*256所以仅仅根据nValue是不能求出x,y的,ps,如果你指定了y的范围(例如:y>=0 && y<1024),情况就不一样了
    现在
    x = nValue/(16*1024);
    y = (nValue/16)%1024;看看,对么?