Given two strings representing two complex numbers.
You need to return a string representing their multiplication. Note i2 = -1 according to the definition.
Example 1:
You need to return a string representing their multiplication. Note i2 = -1 according to the definition.
Example 1:
Input: "1+1i", "1+1i" Output: "0+2i" Explanation: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i,
and you need convert it to the form of 0+2i.
Solution in C++:
string complexNumberMultiply(string a, string b) {
int a1 = 0;
int a2 = 0;
int b1 = 0;
int b2 = 0;
string ret;
cal(a, a1, a2);
cal(b, b1, b2);
int real = a1 * b1 - a2 * b2;
int imag = a1 * b2 + a2 * b1;
char final_arr[30];
sprintf(final_arr, "%d+%di", real, imag);
for(int it = 0; it < strlen(final_arr); ++it){
ret.push_back(final_arr[it]);
}
return ret;
}
void cal(string s, int &a1, int &a2){
int iter = 0;
bool is_a1_neg = false;
char a[5] = {0};
if(s[0] == '-'){
is_a1_neg = true;
}
while(iter < s.length()){
if(s[iter] == '+'){
if(is_a1_neg){
s.copy(a, iter - 1, 1);
a[iter - 1] = '\0';
a1 = -atoi(a);
} else {
s.copy(a, iter, 0);
a[iter] = '\0';
a1 = atoi(a);
}
break;
}
++iter;
}
++iter;
if(s[iter] == '-'){
++iter;
s.copy(a, s.length() - iter, iter);
a[s.length() - iter] = '\0';
a2 = -atoi(a);
} else {
s.copy(a, s.length() - iter, iter);
a[iter] = '\0';
a2 = atoi(a);
}
}
int a2 = 0;
int b1 = 0;
int b2 = 0;
string ret;
cal(a, a1, a2);
cal(b, b1, b2);
int real = a1 * b1 - a2 * b2;
int imag = a1 * b2 + a2 * b1;
char final_arr[30];
sprintf(final_arr, "%d+%di", real, imag);
for(int it = 0; it < strlen(final_arr); ++it){
ret.push_back(final_arr[it]);
}
return ret;
}
void cal(string s, int &a1, int &a2){
int iter = 0;
bool is_a1_neg = false;
char a[5] = {0};
if(s[0] == '-'){
is_a1_neg = true;
}
while(iter < s.length()){
if(s[iter] == '+'){
if(is_a1_neg){
s.copy(a, iter - 1, 1);
a[iter - 1] = '\0';
a1 = -atoi(a);
} else {
s.copy(a, iter, 0);
a[iter] = '\0';
a1 = atoi(a);
}
break;
}
++iter;
}
++iter;
if(s[iter] == '-'){
++iter;
s.copy(a, s.length() - iter, iter);
a[s.length() - iter] = '\0';
a2 = -atoi(a);
} else {
s.copy(a, s.length() - iter, iter);
a[iter] = '\0';
a2 = atoi(a);
}
}
Nice Solution
ReplyDelete