腾讯模拟题--大数运算

实现方案:

两层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);
}

 

posted @ 2016-03-27 12:10  狼行博客园  阅读(264)  评论(0编辑  收藏  举报