我看了FFT算法一节想解此问题的,因为为了进行FFT运算,先要把一系列数据(存在数组中)按照编号的二进制进行逆序排列。比如定义a[8],a[001]与a[100]交换;定义a[16],a[0001]与a[1000]交换;定义a[32],a[00001]与a[10000]交换,a[00010]与a[01000]交换。想了几天,不知如何解决。

解决方案 »

  1.   

    瞎写的
    错了不要骂我啊首先解析一下 输入的a[i]
    如 8=2‘3,  16=2‘4,32 = 2‘5 ,x=y‘z然后设计数器
    读入a[二进制],读到一的时候计数最后如果m+n = z-1
    就交换
      

  2.   

    #include "math.h"
    #include "stdio.h"
    int act(int n,int m);
    void main()
    {
    const int n = 32;
    int buf[n],buf1[n];
    int i,j,k=0;
    for(i=0;i<n;i++) buf[i] = i;
    while(i>1)
    {
    k++;
    i>>=1;
    }
    for(i=0;i<n;i++)
    {
    j = act(i,k);
    buf1[j] = buf[i];
    }
    for(i=0;i<n;i++)
    {
    printf("buf1[%x] = %x\n",i,buf1[i]);
    }
    }
    int act(int n,int m)
    {
    int temp=0,i;
    for(i=0;i<m;i++)
    {
    temp <<= 1;
    temp += n%2;
    n >>= 1;
    }
    return temp;
    }
    希望是你需要的结果!