//先看一下,我也不知道对不对
因为你的数的位数很大,任何简单类型的变量都无法直接存储。
我觉得可以用两个字符串接收输入的两个数,数的大小不超过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编辑过]