在之前的笔试题解析里面,我写了大数相加的问题,这里再剖析一个大数相乘,顾名思义,大数相乘就是这个数已经大到最大的数据类型都没有办法保存了。
我们看看最大的数据类型可以保存多大的数据。
#include "stdio.h" #include "string.h" int main() { printf("0~%llu\n",(1ULL << sizeof(unsigned long long)*8) -1); return 0; }
代码输出:
0~18446744073709551615
所以如果我们的数大于18446744073709551615就会存在没有一个数据类型可以存储的情况,所以会有大数相乘的问题。
如何解决大数相乘问题?看我下面的解题思路,这个思路可以也是从网上看到的。

-
我们拿乘数的最低位,也就是2358中的8 依次乘以被乘数的每一位,然后不做进位处理得到8 16 32 40.
-
继续拿十位,百位,千位相乘,还是不进位
-
然后依次列相加,相加的时候,也不做进位处理得到一个数据2 7 19 40 51 57 40.
-
后面循环对上一步得到的数据进行进位处理,就会得到最终的结果。
#include "stdio.h" #include "string.h" #define char_to_int(a) (int) (a - '0') #define int_to_char(a) (char)(a + '0') int main() { char a[1000]={"1245"}; char b[1000]={"2358"}; char c[1000]={0}; int i = 0, j = 0, k = 0; memset(c,0,sizeof(c)); printf("%ld\n",strlen(a)-1); printf("%ld\n",strlen(b)-1); /*完成图片中的1,2步,结果从数组开头开始存放*/ for (i = 0; i关注打赏
立即登录/注册


微信扫码登录