怎样把一个数除以3的运算用移位和加法来表达,要求效率高。准确到个位即可。

解决方案 »

  1.   

    这是一个级数问题!
    |x|<1
    1+x^2+x^3+x^4+...+x^n=1/(1-x)
    1/3=1/4+1/8(1-1/2+1/4-1/8...)
    是一个无穷递缩等比数列 公比q=-1/2
    你需要根据数据的位数编写代码!
    假设是32位的数据那你的数列的最后一位为-1/(2^32)(舍掉)
    程序写起来有点麻烦如:
    #include "stdafx.h"
    #include "iostream.h"
    int main(int argc, char* argv[])
    {
     int x;
    cout<<"Please input the number:";
    cin>>x; int nResult=0;
    int index; nResult+=(x>>2);

    for(index=3;index<32;index+=2)
    nResult+=(x>>index);
    for(index=4;index<32;index+=2)
    nResult-=(x>>index); cout<<"The result is: "<<nResult<<endl; return 0;
    }----------------------
    PS.程序对一些临界值得测试结果不对!你自己调试以下。
    我想我的思路还是正确的!
    解决了后告诉我!
    [email protected]
      

  2.   

    这是一个级数问题!
    |x|<1
    1+x^2+x^3+x^4+...+x^n=1/(1-x)
    1/3=1/4+1/8(1-1/2+1/4-1/8...)
    是一个无穷递缩等比数列 公比q=-1/2
    你需要根据数据的位数编写代码!
    假设是32位的数据那你的数列的最后一位为-1/(2^32)(舍掉)
    程序写起来有点麻烦如:
    #include "stdafx.h"
    #include "iostream.h"
    int main(int argc, char* argv[])
    {
     int x;
    cout<<"Please input the number:";
    cin>>x; int nResult=0;
    int index; nResult+=(x>>2);

    for(index=3;index<32;index+=2)
    nResult+=(x>>index);
    for(index=4;index<32;index+=2)
    nResult-=(x>>index); cout<<"The result is: "<<nResult<<endl; return 0;
    }----------------------
    PS.程序对一些临界值得测试结果不对!你自己调试以下。
    我想我的思路还是正确的!
    解决了后告诉我!
    [email protected]