这道题是复数相乘的题目,个人感觉还是比较简单的。写了几个小函数解决。
intergerToString:整数转换成string类型
getRealAndImag:从string类型的复数里提取出实部和虚部(int类型)
class Solution {
public:
string complexNumberMultiply(string a, string b) {
string res;
int real1,real2,img1,img2,real,img;
getRealAndIma(a, real1, img1);
getRealAndIma(b,real2,img2);
real = real1 * real2 - img1 * img2;
img = real1 * img2 + real2 * img1;
res = formComplexString(real, img);
return res;
}
string formComplexString(int real, int img){
string s;
s.append(intergerToString(real));
s.append("+");
s.append(intergerToString(img));
s.append("i");
return s;
}
string intergerToString(int n){
string s;
if(n < 0){
n = (-1) * n;
s.append("-");
}
int m = n, ncount = 1;
while(m/10){
m = m / 10;
ncount *= 10;
}
do{
int c = n / ncount;
string t;
t.resize(1);
t[0] = '0' + c;
s.append(t);
n = n % ncount;
ncount /= 10;
}while(ncount);
return s;
}
void getRealAndIma(string s, int &real, int &img){
real = 0;
img = 0;
int i = 0,j = 0,sign = 1;
for(i = 0; i < s.size() && s[i] != '+'; ++ i){
if(s[i] == '-'){
sign = -1;
}else{
real = real * 10 + (s[i] - '0');
}
}
real *= sign;
sign = 1;
for(j = i + 1; j < s.size() && s[j] != 'i'; ++ j){
if(s[j] == '-'){
sign = -1;
}else{
img = img * 10 + (s[j] - '0');
}
}
img *= sign;
}
};