當前位置:編程學習大全網 - 源碼下載 - 如何用數組完成兩個超長正整數的相乘

如何用數組完成兩個超長正整數的相乘

//這個程序實現了兩個大整數的相乘。註意:整數用二進制表示。即每壹位都是0或1。

//例如:10010111101//程序中先輸入被乘數和乘數的位數,然後動態套用空格,長整數的每壹位都以字符的形式進行處理。//模擬計算機乘法的實現,通過將整數乘法轉化為整數加法來實現。# include & ltstdio.h & gt//將數組元素左移x位,低位用0填充。

void leftmove(char c[],int len,int x)

{

如果(x==0)

返回;

其他

{

for(int I = 0;我& ltx;i++)

c[I+len]= ' 0 ';

}

}//將數組元素右移x位,高位用0填充。

void rightmove(char c[],int & amplen,int x)

{

如果(x==0)

返回;

其他

{

for(int I = len-1;我& gt=0;我-)

{

c[I+x]= c[I];

}

for(int j = 0;j & ltx;j++)

{

c[j]= ' 0 ';

}

}

len+= x;

}//模擬計算機計算兩個數的乘積。通過向左或向右移動數組,然後將位相加,就得到乘積。

void add(char a[],char s[],int & amplen)

{

int I;

int c = 0;//進位

內部溫度;

for(I = len-1;我& gt=0;我-)

{

temp =(a[I]--0 ')+(s[I]--0 ')+c;

if(temp==1)

{

s[I]= ' 1 ';

c = 0;

}

如果(溫度==2)

{

s[I]= ' 0 ';

c = 1;

如果(i==0)

{

for(int j = len-1;j & gt=0;j-)//最高有效位有進位。

{

s[j+1]= s[j];

}

s[j+1]= ' 1 ';

len+= 1;

}

} }

}

int main()

{

int length,I;

Printf("請輸入被乘數和乘數的位數:\ n ");

int n1,N2;

scanf("%d%d ",& ampn 1;N2);

char * a = new char[n 1];//被乘數

char * b = new char[N2];//multiplier char * s = new char[n 1+N2];//產品

for(I = 0;我& ltn 1+N2;I++) //初始化為0

s[I]= ' 0 ';長度= n 1;

Printf("請輸入被乘數和乘數(二進制表示):\ n ");

scanf("%s%s ",a,b);

for(I = N2-1;我& gt=0;我-)

{

if((b[I]--0 ')= = 1)

{

leftmove(a,n1,n 1-1-I);//如果是1,數組A左移I位,低位補0。

rightmove(s,長度,N2-I-1);//將S數組右移I位,高位用0填充。

add(a,s,length);///將數組A的每壹位加到S上..

}

}

for(int j = 0;j & lt長度;j++)

printf("%c ",s[j]);

printf(" \ n ");返回0;

}

  • 上一篇:尋找底部強勢股的兩種技術方法
  • 下一篇:狼人殺官方版十連抽與氪金買皮膚攻略
  • copyright 2024編程學習大全網