Product //大数相乘

客官°小女子只卖身不卖艺 2022-08-06 00:28 215阅读 0赞
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 1000
  4. void yiwei(char *ch, int a);
  5. void add(char *ch1, char *ch2);
  6. void rev(char *ch);
  7. int main()
  8. {
  9. char ch1[N], ch2[N], ch3[N], ch4[N];
  10. int i, j, k;
  11. while(scanf("%s %s", ch1, ch2) != -1)
  12. {
  13. rev(ch1);rev(ch2);
  14. memset(ch4, 0, sizeof(ch4));
  15. for( i=0; ch1[i]!=0; i++)
  16. {
  17. memset(ch3, 0, sizeof(ch3));
  18. for( j=0; ch2[j]!=0; j++) //ch3中存的是对应位乘积+1,不加1可能为0了。
  19. {
  20. ch3[j] = (ch1[i]-'0')*(ch2[j]-'0')+1;
  21. }
  22. for( k=0; ch3[k]; k++)
  23. {
  24. if(ch3[k]-1 > 9)
  25. {
  26. if(!ch3[k+1])
  27. {
  28. ch3[k+1] += (ch3[k]-1)/10+1;
  29. ch3[k] = (ch3[k]-1)%10+1;
  30. }
  31. else
  32. {
  33. ch3[k+1] += (ch3[k]-1)/10;
  34. ch3[k] = (ch3[k]-1)%10+1;
  35. }
  36. }
  37. }
  38. k = 0;
  39. while(ch3[k])
  40. {
  41. ch3[k] = ch3[k]-1+'0';
  42. k++;
  43. }
  44. yiwei(ch3, i);
  45. add(ch4, ch3);
  46. }
  47. rev(ch4);
  48. if(ch4[0]=='0')
  49. ch4[1] = 0;
  50. printf("%s\n", ch4);
  51. }
  52. return 0;
  53. }
  54. void yiwei(char *ch, int a)
  55. {
  56. int len, i;
  57. len = strlen(ch);
  58. for( i=len+a; i>=a; i--)
  59. {
  60. ch[i] = ch[i-a];
  61. }
  62. for(i=0; i<a; i++)
  63. ch[i] = '0';
  64. }
  65. void add(char *ch1, char *ch2)
  66. {
  67. int i = 0;
  68. while(ch1[i] || ch2[i])
  69. {
  70. if(!ch1[i] || !ch2[i])
  71. ch1[i] = ch1[i]+ch2[i];
  72. else
  73. ch1[i] = ch1[i]+ch2[i]-'0';
  74. i++;
  75. }
  76. i = 0;
  77. while(ch1[i])
  78. {
  79. if(ch1[i] > '9')
  80. {
  81. if(!ch1[i+1])
  82. {
  83. ch1[i+1] += (ch1[i]-'0')/10+'0';
  84. ch1[i] = '0'+(ch1[i]-'0')%10;
  85. }
  86. else
  87. {
  88. ch1[i+1] += (ch1[i]-'0')/10;
  89. ch1[i] = '0'+(ch1[i]-'0')%10;
  90. }
  91. }
  92. i++;
  93. }
  94. }
  95. void rev(char *ch)
  96. {
  97. int len, i;
  98. char ch1[N];
  99. len = strlen(ch);
  100. for(i=0; i<len; i++)
  101. ch1[len-i-1] = ch[i];
  102. for(i=0; i<len; i++)
  103. ch[i] = ch1[i];
  104. }

发表评论

表情:
评论列表 (有 0 条评论,215人围观)

还没有评论,来说两句吧...

相关阅读

    相关 大数相乘

    一、背景 最近在看算法的时候发现了一个问题,我们都知道方法的形参是要指定类型的,假如有以下方法 public int example(int a,int b){

    相关 大数相乘

    [用分治法实现大数乘法,加法,减法(java实现)][java]   大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O

    相关 大数相乘

    在这之前我们先来了解一下Java 中每种基本数据类型所占存储空间的大小。其中 1Byte = 8bit。 <table> <tbody> <tr> <th>

    相关 大数相乘

    题目 编写两个任意位数的大数相乘的程序,给出计算结果。比如: > 题目描述: 输出两个不超过100位的大整数的乘积。 > 输入: 输入两个大整数,如1234567