请高手将下列C++代码翻译成ASP中VBscript脚本语言

来源:百度知道 编辑:UC知道 时间:2024/06/08 03:48:47
int DToB(int *a,int n)
{
int i=0;
while(n)
{
a[i++]=n%2;
n/=2;
}
return i--;
}

int mod(int a,int m,int q)
{
int b[1000],c=0,d=1,i;
int len=DToB(b,m);
for(i=len-1;i>=0;i--)
{
c=2*c;
d=(d*d)%q;
if(b[i]==1)
{
c=c+1;
d=(d*a)%q;
}
}
return d;
}
谢谢下面的好人
不过有一个问题,我这两个函数是快速模指数算法,也就是求a^m mod q。但是按照你的程序,无论输入什么结果都为1.我想可能是哪出问题了,因为我这C语言程序肯定是没问题的。所以麻烦你再看看,改改?可以吗?谢谢了!!

结果不知为何还是不对,就是随便输入个来计算模数,结果还是不对,我想看看。你有时间麻烦你想想可以吗?呵呵

最后我自己改了改,下面这样结果正确:
<%
function DToB(a,n)
dim i
i = 0
while n
a(i) = n mod 2
n = n \ 2
i = i + 1
wend '先算a[i]再i++
'该行去掉了 i= i - 1
DToB = i
end function
%>
<%
function xmod(a, m, q)
dim b(999), c, d, i, xlen '这里b(999)在VBS中表示0-999,与C语言不一样
c = 0
d = 1

'VBS中所有变量均无变量类型,变量类型随其具体数值而变
function DToB(a,n)
dim i
i = 0
while n
a(i) = n mod 2
i = i + 1
n = n \ 2
wend
DToB = i
i = i - 1
end function

'因mod在VBS中是关键词不能用作函数名,故现更名为xmod
function xmod(a, m, q)
dim b(999), c, d, i, xlen '这里b(999)在VBS中表示0-999,与C语言不一样
c = 0
d = 1
xlen = DToB(b, m)
for i = xlen - 1 to 0 step -1
c = 2 * c
d = (d * d) mod q
if b(i) = 1 then
c = c + 1
d = (d * a) mod q
end if
next
xmod = d
end function

补充:我忘了len也是VBS关键词,用了会出问题,所以改用xlen,上面是我修改后的版本,我想这样应该可以了。

补充2:我觉得如果编译器认为i--,是先计算i,再计算--,则在C语言的return i--表示先返回i数值,然后再计算i=i-1,由于函数已经返回,所以做不做i=i-1都无所谓,而VBS却不一样,函数名=返回值,并不表示函数的返回,如果其后面有程序代码,仍旧照常执行,这和C语言是不一样的。