如何实现按数组编号的二进制逆序排列? 我看了FFT算法一节想解此问题的,因为为了进行FFT运算,先要把一系列数据(存在数组中)按照编号的二进制进行逆序排列。比如定义a[8],a[001]与a[100]交换;定义a[16],a[0001]与a[1000]交换;定义a[32],a[00001]与a[10000]交换,a[00010]与a[01000]交换。想了几天,不知如何解决。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 瞎写的错了不要骂我啊首先解析一下 输入的a[i]如 8=2‘3, 16=2‘4,32 = 2‘5 ,x=y‘z然后设计数器读入a[二进制],读到一的时候计数最后如果m+n = z-1就交换 #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;}希望是你需要的结果! windows陷阱分发机制的若干问题 gdi+ 半透明画刷画图为什么画不出来? CryptoAPI是否可以单独安装? MessageBox背着我们,干了哪些勾当? 如何判断向网页提交的数据是否正确 VC编写串口通信时用到MSComm控件遇到的问题 请教高手:有关bitblt贴图和在贴图上面显示文字的问题 DirectSound的问题 请问如何修改windows的系统时间 菜鸟问题:请问如何在CView类中结束程序? 如何在vc中实现将程序最小化到托盘区? clistctrl的一个小问题,欢迎讨论。
错了不要骂我啊首先解析一下 输入的a[i]
如 8=2‘3, 16=2‘4,32 = 2‘5 ,x=y‘z然后设计数器
读入a[二进制],读到一的时候计数最后如果m+n = z-1
就交换
#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;
}
希望是你需要的结果!