1. /*大数相乘
    2. 思路: 1.先将字符串倒序并转换为数字
    3. 2.逐位相乘,并存入一个数组e[i + j]中
    4. 3.处理进位,并消去多余的0
    5. 4.转换并把数组e[i]反转输出*/
    6. #include<stdio.h>
    7. #include<algorithm>
    8. #include<string.h>
    9. #include<iostream>
    10. using namespace std;
    11. #define Max 1000
    12. int main()
    13. {
    14. char a[Max] = "12345678", b[Max]="87654321";
    15. int c[Max], d[Max], e[Max];
    16. int a1, a2;
    17. while (cin >> a >> b)
    18. {
    19. memset(c, 0, sizeof(c));
    20. memset(d, 0, sizeof(d));
    21. memset(e, 0, sizeof(e));
    22. a1 = strlen(a);
    23. a2 = strlen(b);
    24. //将字符串倒序,将字符转化为数字才能进行乘法
    25. int x = 0;
    26. for (int i = a1 - 1; i >= 0; i--)
    27. {
    28. c[x] = a[i] - 48;
    29. x++;
    30. }
    31. x = 0;
    32. for (int i = a2 - 1; i >= 0; i--)
    33. {
    34. d[x] = b[i] - 48;
    35. x++;
    36. }
    37. //对两组字符串中的数逐位相乘,存于e[i+j]
    38. for (int i = 0; i < a1; i++)
    39. {
    40. for (int j = 0; j < a2; j++)
    41. {
    42. e[i + j] += (c[i] * d[j]);
    43. }
    44. }
    45. //得到的结果进行进位制处理
    46. for (int j = 0; j < Max; j++)
    47. {
    48. //进制位处理的写法
    49. if (e[j] >= 10)
    50. {
    51. e[j + 1] += e[j] / 10;
    52. e[j] %= 10;
    53. }
    54. }
    55. int i;
    56. //除去多余的0
    57. for (i = Max - 1; i >= 0; i--)
    58. {
    59. if (e[i] != 0)
    60. break;
    61. }
    62. printf("%s * %s = ", a, b);
    63. //反转数组并输出结果
    64. for (; i >= 0; i--)
    65. {
    66. printf("%d", e[i]);
    67. }
    68. printf("\n");
    69. }
    70. return 0;
    71. }