盘锦油田冬防保温设备:求M×N的值。(M与N的位数均不超过255位)列出竖式。

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 18:55:59
求M×N的值。(M与N的位数均不超过255位)列出竖式。
哪位会,我真的急用(pascal程序),马上发来!
我已经没有积分了,准确的说我已经负分了.诸位拜托了!!!!
只要不是Pascal语言,我就投诉你!!!

c++语言的
看看你能看懂不..
看懂思想就好编程了..

#define WORD unsigned _int16
#define TDWORD unsigned _int32
#define WORD_SIZE (sizeof(WORD))
#define WORD_BITS (WORD_SIZE*8)
#define MAX_WORD 0x0000FFFF
#define LO(x) ((x)&MAX_WORD)
#define HI(x) (LO((x)>>WORD_BITS))
#include<stdio.h>
#include<iostream>
using namespace std;

int count(void)
{
FILE * fp = fopen("f:\\TestData.txt","r+");
if (fp == NULL) {printf("文件打不开!");return 0;}

//计算两个乘数的字节数

char ch = fgetc(fp);
unsigned int count1 = 0;
unsigned int count2 = 0;
while (ch != '\n')
{
count1 ++;
ch = fgetc(fp);
}
ch = fgetc(fp);
while (ch != '\n')
{
count2 ++;
ch = fgetc(fp);
}

fseek(fp,0,0);
cout<<"第一个数的长度:"<<count1<<endl;
cout<<"第二个数的长度:"<<count2<<endl;
unsigned int maxlength=((count1>=count2 ? count1:count2)+3)/4;
return maxlength;
fclose(fp);
}
void readdat(WORD *a,WORD *b,unsigned int maxlength)
{
FILE * fp = fopen("f:\\TestData.txt","r+");
if (fp == NULL) {printf("文件打不开!");return;}
WORD tmp;
//从测试文件中读取第一个数
for ( int i =0 ;i <maxlength ; i++){
fscanf(fp,"%04x",&tmp);
a[i] = tmp;
//cout<<a[i]<<endl;
}
//从测试文件中读取第二个数
for ( i =0 ;i <maxlength ; i++){
fscanf(fp,"%04x",&tmp);
b[i] = tmp;
//printf("%4x\n",b[i]);
}
fclose(fp);

}
void writedat(WORD *R,unsigned int M)
{
FILE *fp;
fp=fopen("f:\\result.txt","w");//计算结果保存到result.txt中,以便比较。
if (fp == NULL) {printf("文件打不开!");return;}
for (int i=0;i<2*M; i++)
{
//printf("%04x",R[i]);
fprintf(fp,"%04x",R[i]);
}
fclose(fp);
}
void Multiply(WORD *R,WORD *A,WORD *B,unsigned int N)
{
TDWORD T[1000],tmp;
int i,j;
for(i=0;i<2*N;i++) T[i]=0;
/*T[]数组用来存放中间计算结果。
在这里针对读出来的是16位二进制,
所以设置了数组T[]类型是TDWORD型的,
因此防溢出能力可达2^16(止加的结果溢出)。
*/
for(i=N-1;i>=0;i--)
for(j=N-1;j>=0;j--)
{ tmp=0;
tmp=(TDWORD)B[i]*A[j];
T[i+j+1]+=LO(tmp);
T[i+j]+=HI(tmp);
}
R[2*N-1]=LO(T[2*N-1]);
for(i=N-1;i>=0;i--)
for(j=N-1;j>=0;j--)
R[i+j]=LO(T[i+j])+HI(T[i+j+1]);
//printf("%04x\n",R[2*N-1]);//测试边界值是否正确。
}
void main()
{
int size;
size=count();
WORD * A = (WORD *) malloc(sizeof(WORD)*size);
WORD * B = (WORD *) malloc(sizeof(WORD)*size);
WORD * R = (WORD *) malloc(sizeof(WORD)*size*2);
readdat(A,B,size);
Multiply(R,A,B,size);
writedat(R,size);
free(A);
free(B);
free(R);
cout<<endl;
cout<<" end ! "<<endl;
getchar();
}