回 帖 发 新 帖 刷新版面

主题:求大神指导啊~急急急!!!

代码编译无错 但程序执行时报错。。。是用sha-1算法写的伪随机数生成器,求指导!!!
#include <iostream>
#include <cmath>
using namespace std;
int sha(__int64 x[5])
{
        int i;
        __int64 n,w[80],a,b,c,d,e,h[5];

        w[0]=x[0];
        w[1]=x[1];
        w[2]=x[2];
        w[3]=x[3];
        w[4]=x[4];
        w[5]=(__int64)pow(2,31);
        w[6]=w[7]=w[8]=w[9]=w[10]=w[11]=w[12]=w[13]=w[14]=0;
        w[15]=160;
        h[0]=0x67452301;
        h[1]=0xEFCDAB89;
        h[2]=0x98BADCFE;
        h[3]=0x10325476;
        h[4]=0xC3D2E1F0;

        for(i=16;i<80;i++)
                {w[i]=w[i-3]^w[i-8]^w[i-14]^w[i-16];
             w[i]=(w[i]-(__int64)floor(w[i]/(__int64)pow(2,31))*(__int64)pow(2,31))*2+(__int64)floor(w[i]/(__int64)pow(2,31));
                }

        a=h[0];
        b=h[1];
        c=h[2];
        d=h[3];
        e=h[4];

        for(i=0;i<20;i++)
                {n=((a-(__int64)floor(a/(__int64)pow(2,27))*(__int64)pow(2,27))*32+(__int64)floor(a/(__int64)pow(2,27))+(b&c)|(~b&d)+e+w[i]+0x5A827999)%(__int64)pow(2,32);
             e=d;
             d=c;
             c=(b-(__int64)floor(b/4)*4)*(__int64)pow(2,30)+(__int64)floor(b/4);
             b=a;
             a=n;
             h[0]=(h[0]+a)%(__int64)pow(2,32);
             h[1]=(h[1]+b)%(__int64)pow(2,32);
             h[2]=(h[2]+c)%(__int64)pow(2,32);
             h[3]=(h[3]+d)%(__int64)pow(2,32);
             h[4]=(h[4]+e)%(__int64)pow(2,32);
                }

        for(;i<40;i++)
                {n=((a-(__int64)floor(a/(__int64)pow(2,27))*(__int64)pow(2,27))*32+(__int64)floor(a/(__int64)pow(2,27))+b^c^d+e+w[i]+0x6ED9EBA1)%(__int64)pow(2,32);
             e=d;
             d=c;
             c=(b-(__int64)floor(b/4)*4)*(__int64)pow(2,30)+(__int64)floor(b/4);
             b=a;
             a=n;
             h[0]=(h[0]+a)%(__int64)pow(2,32);
             h[1]=(h[1]+b)%(__int64)pow(2,32);
             h[2]=(h[2]+c)%(__int64)pow(2,32);
             h[3]=(h[3]+d)%(__int64)pow(2,32);
             h[4]=(h[4]+e)%(__int64)pow(2,32);
                }

        for(;i<60;i++)
                {n=((a-(__int64)floor(a/(__int64)pow(2,27))*(__int64)pow(2,27))*32+(__int64)floor(a/(__int64)pow(2,27))+(b&c)|(b&d)|(c&d)+e+w[i]+0x8F1BBCDC)%(__int64)pow(2,32);
             e=d;
             d=c;
             c=(b-(__int64)floor(b/4)*4)*(__int64)pow(2,30)+(__int64)floor(b/4);
             b=a;
             a=n;
             h[0]=(h[0]+a)%(__int64)pow(2,32);
             h[1]=(h[1]+b)%(__int64)pow(2,32);
             h[2]=(h[2]+c)%(__int64)pow(2,32);
             h[3]=(h[3]+d)%(__int64)pow(2,32);
             h[4]=(h[4]+e)%(__int64)pow(2,32);
                }

        for(;i<80;i++)
                {n=((a-(__int64)floor(a/(__int64)pow(2,27))*(__int64)pow(2,27))*32+(__int64)floor(a/(__int64)pow(2,27))+b^c^d+e+w[i]+0xCA62C1D6)%(__int64)pow(2,32);
             e=d;
             d=c;
             c=(b-(__int64)floor(b/4)*4)*(__int64)pow(2,30)+(__int64)floor(b/4);
             b=a;
             a=n;
             h[0]=(h[0]+a)%(__int64)pow(2,32);
             h[1]=(h[1]+b)%(__int64)pow(2,32);
             h[2]=(h[2]+c)%(__int64)pow(2,32);
             h[3]=(h[3]+d)%(__int64)pow(2,32);
             h[4]=(h[4]+e)%(__int64)pow(2,32);
                }

        return h[5];
}

int main()
{
        __int64 g[5];
        unsigned a,b,c,d,e;
        __int64 f[5]={1,2,3,7,3};
    g[5]=sha(f);
        a=g[0];
        b=g[1];
        c=g[2];
        d=g[3];
        e=g[4];
    cout<<a<<'\0'<<b<<'\0'<<c<<'\0'<<d<<'\0'<<e<<'\0'<<endl;
    return 0;
}

小弟先谢了

回复列表 (共2个回复)

沙发

int sha(__int64 x[5])
此处返回的是int型,你想得到的是返回一个指针吧

板凳

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

我来回复

您尚未登录,请登录后再回复。点此登录或注册