大数的平方运算
#include "stdafx.h"#include "conio.h"
#include <stdio.h>
void square(unsigned int *R1,int t, unsigned int *R_square,int h)
{
unsigned __int64 tempxy,temp1,temp2,temp3,temp,tempc,tempz,x,c;int i,j;
unsigned int y;
c=0;
for(i=0;i<t;i++)
{
tempxy=c+(__int64)R1[i]*R1[i];
x=tempxy>>32;
y=(unsigned int)tempxy&0xffffffff;
c=x;
R_square[2*i]=y;
for(j=i+1;j<t;j++)
{
temp1=(__int64)R1[i]*R1[i];
temp2=(__int64)temp1+R_square[i+j];
temp3=(__int64)temp1+c;
tempxy=(__int64)temp2+temp3;
if(tempxy<temp2||tempxy<temp3)
temp=1;
else
temp=0;
x=tempxy>>32;
y=(unsigned int)tempxy&0xffffffff;
tempc=temp<<32;
x=x|tempc;
c=x;
R_square[i+j]=y;
}
R_square[i+t]=x;
R_square[i+t+1]=temp;
}
printf("\n");
for(i=0;i<2*t;i++)
printf("%08x",R_square[2*t-1-i]);
}
int main()
{
int i,h,t;__int64 a;
unsigned int *R1;R1=new unsigned int[32];
unsigned int *R2;R2=new unsigned int[32];
unsigned int *R_add;R_add=new unsigned int[64];
for(i=0;i<32;i++)
{
R1[i]=0xffffffff;
R2[i]=0xffffffff;
}
for(i=0;i<64;i++)
{
R_add[i]=0x0;
}
h=t=32;
square(R1,h, R_add,64);
getch();
}
我现在写的是大数平方运算的程序,可是结果就是不对。。
我用的是32个0xffffffff的平方,结果应该是前面的1024是f,然后是1023个0最后是1
大家帮忙看看是什么地方出了问题吧