문자열로 두 개의 숫자가 있다고 가정합니다. 우리는 그것들을 곱하고 결과를 문자열로 반환해야 합니다. 따라서 숫자가 "26"과 "12"이면 결과는 "312"가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- x와 y의 두 인수를 취하면 x가 y를 나눕니다.
- x <-무한대이고 y =1이면 무한대를 반환합니다.
- a :=|x|, b :=|y| 및 ans :=0
- 동안 a – b>=0
- p :=0
- 동안 a – (왼쪽으로 이동한 b(왼쪽으로 1p 이동))>=0
- p :=p + 1
- a :=a – (왼쪽 시프트 b, p번)
- ans :=ans + 왼쪽 시프트 1p 번
- x> 0이 참이고 y> 0도 참이면 ans를 반환하고, 그렇지 않으면 (–s)를 반환합니다.
예(C++)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string multiply(string num1, string num2);
};
string Solution::multiply(string nums1, string nums2) {
int n = nums1.size();
int m = nums2.size();
string ans(n + m, '0');
for(int i = n - 1; i>=0; i--){
for(int j = m - 1; j >= 0; j--){
int p = (nums1[i] - '0') * (nums2[j] - '0') + (ans[i + j + 1] - '0');
ans[i+j+1] = p % 10 + '0';
ans[i+j] += p / 10 ;
}
}
for(int i = 0; i < m + n; i++){
if(ans[i] !='0')return ans.substr(i);
}
return "0";
}
main(){
Solution ob;
cout << ob.multiply("28", "25");
} 입력
"26" "12"
출력
"312"