C++这么写为什么不对
查看原帖
C++这么写为什么不对
657204
FPXLwx楼主2023/8/28 17:18
#include<iostream>
#include<vector>
#include<string>
using namespace std;

vector<int> multiply(vector<int>& A, int b) 
{
    vector<int> C;
    int t = 0;
    for (int i = 0; i < A.size() || t; i++) 
    {
        if (i < A.size()) t += A[i] * b;
        C.push_back(t % 10);
        t /= 10;
    }
    while (C.size() > 1 && C.back() == 0) C.pop_back();
    return C;
}

int countDecimalPlaces(double num) 
{
    string numStr = to_string(num);
    size_t dotPosition = numStr.find('.');
    if (dotPosition != string::npos) 
    {
        return numStr.size() - dotPosition - 1;
    }
    else 
    {
        return 0;
    }
}

int main() {
    double a;
    int b;
    while (cin >> a >> b) {
        int x = countDecimalPlaces(a);
        for (int i = 0; i < x; i++) 
        {
            a *= 10;
        }
        vector<int> A;
        A.push_back(1);
        for (int i = 0; i < b; i++) 
        {
            A = multiply(A, static_cast<int>(a));
        }
        string d;
        for (int i = A.size() - 1; i >= 0; i--) 
        {
            d += to_string(A[i]);
        }

        while (d.size() < x * b) 
        {
            d = "0" + d;
        }

        if (x > 0) 
        {
            d.insert(d.size() - x * b, 1, '.');
        }
        else 
        {
            d = "0." + d;
        }
        while (!d.empty() && d.back() == '0') 
        {
            d.pop_back();
        }
        if (!d.empty() && d.back() == '.')
        {
            d.pop_back();
        }

        cout << d << endl;
    }
    return 0;
}
2023/8/28 17:18
加载中...