大位乘法如何快速計算?

General 更新 2024-12-17

請設計一個有效的算法,可以進行兩個n位大整數的乘法運算。

#include

#include

#include

#define N 20000//最大位數。。

void MUL (char *ch1 , char *ch2 , char *ch3)

{// ch3 = ch1*ch2;

int i , j , len1 = strlen (ch1) , len2 = strlen (ch2) , len3 , tmp , num1[N] , num2[N] , num3[N];

memset (num1 , 0 , sizeof(num1));

memset (num2 , 0 , sizeof(num2));

memset (num3 , 0 , sizeof(num3));

for (i=len1-1;i>=0;i--) num1[len1-1-i] = ch1[i] - 48; for (i=len2-1;i>=0;i--) num2[len2-1-i] = ch2[i] - 48;

for (i=0;i

{

tmp = 0;

for (j=0;j

{

num3[i+j] += num1[i]*num2[j] + tmp;

tmp = 0;

if (num3[i+j] >= 10) { tmp = num3[i+j]/10; num3[i+j] %= 10; }

}

while (tmp != 0) { num3[i+j] += tmp; tmp = num3[i+j]/10; j ++; }

}

len3 = len1+len2;

while (len3 > 1 && num3[len3-1] == 0) len3 --;

for (i=0;i

ch3[len3] = '\0';

return ;

}

int main()

{

char p[N], q[N];

char n[N] = "";

printf("計算p與q的乘積:\n");

printf("p = ");

gets(p);

printf("q = ");

gets(q);

MUL(p, q, n);

printf("p*q = %s\n", n);

printf("\n");

getch();

return (0);

}

運行結果如下:...

有趣的乘法計算,十位相同,個位相加大於十的怎麼算

2位數嗎,大於10加上去啊

請設計一個有效的算法,可以進行兩個n位大整數的乘法運算。

#include

#include

void a2d(int x[],char a[])

{

int i,j;

for(i=0;i<505;i++)

x[i]=0;

j=strlen(a)-1;

for(i=0;j>=0;j--,i++)

x[i]=a[j]-'0';

}

int my_len(int x[])

{

int i;

for(i=504;i>=0&&x[i]==0;i--);

return i<0?0:i;

}

void multi(int x[],int y[])

{

int sum[505]={0},i,j,k,lx=my_len(x),ly=my_len(y);

for(i=0;i<=lx;i++)

for(j=0;j<=ly;j++)

sum[i+j]+=x[i]*y[j];

for(i=0;i<504;i++)

{

sum[i+1]+=sum[i]/10;

sum[i]%=10;

x[i]=sum[i];

}

}

int main()

{

int i,x[505],y[505];

char a[505],b[505];

while(scanf("%s%s",a,b)!=EOF)

{

a2d(x,a);

a2d(y,b);

multi(x,y);

i=my_len(x);

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

printf("%d",x[i]);

puts("");

}

return 0;

}

小數乘一位小數的乘法算式,怎樣的算式結果最大

小數可以帶有整數部分,

並不僅僅指純小數,

所以小數乘以一位小數,沒有結果最大的數值,要多大有多大,

如:0.12×0.1=0.012,

503.2×0.1=50.32,

988.55×23.7=23428.635,

……

求一個Pascal最大可以計算兩百位乘兩百位的乘法高精度

程序用常數串x、y輸入數據。你可自行調整:{1219326311370217952237463801111263526900 }constx:string='12345678901234567890';y:string='98765432109876543210';vara,b:array[1..200] of shortint;c:array[1..400] of shortint;ia,ib,ic:integer;i,j,k:integer;m,p,q:integer;beginia:=length(x);ib:=length(y);for i:=1 to ia do a[i]:=ord(x[ia+1-i])-ord('0');for i:=1 to ib do b[i]:=ord(y[ib+1-i])-ord('0');for i:=1 to 400 do c[i]:=0;for i:=1 to ia do beginp:=0; {進位}for j:=1 to ib do beginm:=a[i]*b[j]+p+c[i+j-1];q:=m mod 10;c[i+j-1]:=q;p:=m div 10;end;c[i+ib]:=p;end;for i:=400 downto 1 do if c[i]<>0 then begin k:=i; break; end;for i:=k downto 1 do write(c[i]:1);end.

相關問題答案
大位乘法如何快速計算?
如何快速計算加減法?
如何快速計算二進制?
心算如何快速計算年齡?
大學畢業如何快速賺錢?
大學生如何快速掙錢?
如何快速減掉大肚子?
如何快速停車入位視頻?
如何快速打出大寫數字?
大學如何快速找到對象?