//先看一下,我也不知道对不对
因为你的数的位数很大,任何简单类型的变量都无法直接存储。
我觉得可以用两个字符串接收输入的两个数,数的大小不超过10^6位,字符数组的大小不超过10^6个 ,
10^6B大约1MB
定义1:
乘法就是加法
a[10^6],
b1[10^6]
c[2*10^6]={0}
b1用来计数。每次减一,c都加一个a。个位相加进位到十位,依次类推。
若b1个位减为0,向10位借1,若个位十位为0,向百位借1,依次类推。低位都不够时,如百位减1,百位之后的十位和个位赋值为9,。直到b1减为0.
b1判0准则。先计算b1长度,若借位超过b1长度,则b1减为0了。
定义2: 相乘
a[10^6],
b[10^6]
c[2*10^6]={0}
先b的个位数从a的个位数到最高位依次相乘,乘一个就立刻加到c上,记住进位。b的十位乘a应该从c的十位开始相加,依次类推
334
第一次334*3
4*3=12
c的个位是2,进位1.
3*3+1(进位)=0,进位1
3*3+1(进位)=0,进位1
结果1002
(从c的个位开始加),i指向c相加的最低位
* 223
第二次334*20
4*2=8(进位0)+0 = 8(进位0)
3*2=6(进位0)+0=6(进位0)
3*2=6(进位0)+1=7(进位0)
结果7682
(从c的十位开始加),int i;4个字节,2^32
=1002
第三次334*200
4*2=8(进位0)+6=4(进位1)
3*2+1=7(进位0)+7=4(进位1)
3*2+1=7(进位0)
结果74482 (从c的百位开始加)
+668
+668
=74482
[此贴子已经被作者于2016-10-25 07:54编辑过]