當前位置:編程學習大全網 - 編程語言 - 怎麽用數組完成兩個超長的正整數乘法

怎麽用數組完成兩個超長的正整數乘法

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

//例如:100011 1011101//程序中先輸入被乘數和乘數的位數,然後動態申請空間,以字符的形式來處理長整數的每壹位。//模擬計算機乘法的實現,將整數乘法轉換為整數加法來實現。#include <stdio.h>//將數組元素左移x位,低位補0

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

{

if(x==0)

return ;

else

{

for(int i=0;i<x;i++)

c[i+len]='0';

}

}//將數組元素右移x位,高位補0

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

{

if(x==0)

return ;

else

{

for(int i=len-1;i>=0;i--)

{

c[i+x]=c[i];

}

for(int j=0;j<x;j++)

{

c[j]='0';

}

}

len+=x;

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

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

{

int i;

int c=0; //進位

int temp;

for(i=len-1;i>=0;i--)

{

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

if(temp==1)

{

s[i]='1';

c=0;

}

if(temp==2)

{

s[i]='0';

c=1;

if(i==0)

{

for(int j=len-1;j>=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",&n1,&n2);

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

char* b=new char[n2]; //乘數 char* s=new char[n1+n2]; //積

for(i=0;i<n1+n2;i++) //初始化為0

s[i]='0'; length=n1;

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

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

for(i=n2-1;i>=0;i--)

{

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

{

leftmove(a,n1,n1-1-i); //若為1,將數組a左移i位,低位補0

rightmove(s,length,n2-i-1); //將s數組右移i位,高位補0

add(a,s,length); ///將數組a各位+到s上。

}

}

for(int j=0;j<length;j++)

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

printf("\n"); return 0;

}

  • 上一篇:昆山鄧雲科技職業學院是壹所著名的教師。
  • 下一篇:為什麽在眾多3d打印機耗材種類中選擇PLA?
  • copyright 2024編程學習大全網