主题:求大神指导啊~急急急!!!
代码编译无错 但程序执行时报错。。。是用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;
}
小弟先谢了
#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;
}
小弟先谢了