爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2693|回复: 0

[混合编程] IDL编程学习之二进制相加

[复制链接]

新浪微博达人勋

发表于 2017-4-26 14:23:01 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
题目(出自《算法导论》):
QQ截图20170426141404.png
二进制相加
IDL程序:
前一位进位的值存放在x数组,a、b数组的第i位就是c和x数组的第i+1位。
想着容易,编程难,这个小程序还改了半天,我太弱了。
pro linshi,a,b,n
x=fltarr(n+1)
c=fltarr(n+1)
for i=n-1,0,-1 do begin
  p=where([a,b,x[i+1]] eq 1,count)
    c[i+1]=count mod 2
    x=fix(count/2)
endfor
c[0]=x[0]
print,c
end

这个算法貌似是Θ(n)。
这里的x也未必需要是一个数组,因为用完即扔,设置为反复自我覆盖的一个数即可,省空间。
改进为:
pro linshi,a,b,n
x=0
c=fltarr(n+1)
for i=n-1,0,-1 do begin
  p=where([a,b,x] eq 1,count)
    c[i+1]=count mod 2
    x=fix(count/2)
endfor
c[0]=x
print,c
end

运行与输出:
IDL> linshi,[1,0],[1,1],2
      1.00000     0.000000      1.00000
IDL> linshi,[1,0,1,0],[1,0,1,1],4
      1.00000     0.000000      1.00000     0.000000      1.00000

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表