Kattis Bignum以10的权力划分

时间:2018-03-03 09:39:00

标签: c++ math division bignum

我试图以10的权力实施bignum除法。具体来说,这是一个kattis问题:https://open.kattis.com/problems/divideby100

我相信我的答案是正确的,但我的时间限制超出了警告。我知道这是由于我一直使用的插入功能。我的问题是,什么,如果有的话,更快的替代插入?或者我是疯了,只是将输入视为字符串而错误地解决了这个问题?

#include <cstdlib>
#include <iostream>
#include <vector>
#include <stdio.h>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    string N;
    string M;

    getline(cin, N);
    getline(cin, M);


    long long MSize = M.size();
    long long NSize = N.size();
    long long zeroesInM = MSize - 1;

    if(NSize >= MSize){
        N.insert(NSize - zeroesInM, ".");
        NSize++;
    }else{
        long long zeroesInN = N.size() - 1;
        for(long long i = 0; i < zeroesInM - zeroesInN - 1; i++){
            N.insert(0, "0");
            NSize++;
        }
        N.insert(0, ".");
        N.insert(0, "0");
        NSize += 2;

    }


    long long numTrailingZeros = NSize;
    while (N[numTrailingZeros - 1] == '0'){
            numTrailingZeros--;
    }
    numTrailingZeros = NSize - numTrailingZeros;
    N.erase(NSize-numTrailingZeros, numTrailingZeros);
    NSize -= numTrailingZeros + 1;

    if(N[NSize] == '.'){
        N.erase(NSize);
    }

    cout << N << endl;
    return 0;
}

0 个答案:

没有答案