//例如: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;
}