您的位置:首页 > 其它

腾讯模拟题--大数运算

2016-03-27 12:10 323 查看


实现方案:

两层for,内部具体实现为

临时结果 = 数1*数2+当前resutl内结果。

对结果进行解析,保存哪个,下个位置保存哪个

最后,因为是反向进行保存的,那么就需要翻转工作了。一层for搞定

直接上代码了

int result[2048] = { 0 };//题目中给出的。倒是省去了我们纠结如何定义的麻烦
void Mul(string num1, string num2)
{
const char* str1 = num1.c_str();
const char* str2 = num2.c_str();
int len1 = num1.size();
int len2 = num2.size();
int rol = 0;        //进位偏差
int resultLen = 0;    //保存最终结果长度,翻转的正确结果
for (int i = len1 - 1; i >= 0;--i)
{
int begin = rol;
for (int j = len2 - 1; j >= 0; --j)
{
int res = (str1[i] - '0') * (str2[j] - '0')+result[begin];
result[begin] = res % 10;
result[begin + 1] += res / 10;
begin++;
resultLen = begin-1;
}
rol++;
}
for (int i = 0; i <= resultLen / 2;++i)
{
swap(result[i], result[resultLen - i]);
}
}
void TestMul()
{
string s1("123123");
string s2("456");
Mul(s1, s2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: