fork download
  1. #include <string>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void mul(int int1[], int num2, int cur[], int n1) {
  7. int inc = 0;
  8.  
  9. for (int i = 0; i < n1; i ++) {
  10. inc += int1[i] * num2;
  11. cur[i] = inc % 10;
  12. inc /= 10;
  13. }
  14.  
  15. cur[n1] = inc;
  16. }
  17.  
  18. void add(int ret[], int cur[], int n1, int shift) {
  19. int inc = 0;
  20.  
  21. for (int i = 0; i < n1+1; i ++) {
  22. inc += ret[i+shift] + cur[i];
  23. ret[i+shift] = inc % 10;
  24. inc /= 10;
  25. }
  26. }
  27.  
  28. string multiply(string num1, string num2) {
  29. int n1 = num1.length();
  30. int n2 = num2.length();
  31.  
  32. int int1[n1];
  33. int cur[n1+1];
  34. int ret[n1+n2];
  35.  
  36. for (int i = 0; i < n1; i ++) {
  37. int1[i] = num1[n1-i-1]-'0';
  38. }
  39. cur[n1] = 0;
  40.  
  41. for (int i = 0; i < n1+n2; i ++) {
  42. ret[i] = 0;
  43. }
  44.  
  45.  
  46. for (int i = 0; i < n2; i ++) {
  47. mul(int1, num2[n2-i-1]-'0', cur, n1);
  48. add(ret, cur, n1, i);
  49. }
  50.  
  51. int len = 0;
  52.  
  53. for (int i = n1+n2-1; i >= 0; i --) {
  54. if (ret[i] != 0) {
  55. len = i;
  56. break;
  57. }
  58. }
  59.  
  60. char chars[len+1];
  61.  
  62. for (int i = 0; i < len+1; i ++) {
  63. chars[len-i] = ret[i] + '0';
  64. }
  65.  
  66. return string(chars, len+1);
  67. }
  68.  
  69.  
  70. int main (int argc, char* argv[]) {
  71.  
  72. cout << multiply("10", "10") << endl;
  73.  
  74. return 0;
  75. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
100