zhao_ry514114
赵若伊

导航

 

高精*int

string div(string sa, int b) {
	int la = sa.length(), x = 0;
	for (int i = 0; i < la; i++) {
		a[i + 1] = sa[i] - '0';
	}
	for (int i = 1; i <= la; i++) {
		c[i] = (x * 10 + a[i]) / b;
		x = (x * 10 + a[i]) % b;
	}
	int lc = 1;
	while (c[lc] == 0 && lc < la) lc++;
	string s;
	for (int i = lc; i <= la; i++) {
		s += char(c[i] + '0');
	}
	return s;
}

高精/高精

string multiply(const string& num1, const string& num2) {
	string result(num1.size() + num2.size(), '0');
	int len1 = num1.size(), len2 = num2.size();
	for (int i = len1 - 1; i >= 0; --i) {
		int carry = 0;
		int n1 = num1[i] - '0';

		for (int j = len2 - 1; j >= 0; --j) {
			int sum = result[i + j + 1] - '0' + n1 * (num2[j] - '0') + carry;
			result[i + j + 1] = char(sum % 10 + '0');
			carry = sum / 10;
		}

		if (carry) {
			result[i] = char(carry + '0');
		}
	}
	size_t pos = result.find_first_not_of('0');
	return (pos == string::npos) ? "0" : result.substr(pos);
}

高精+高精

string add(string a, string b) {
    string c;
    int x = 0;
    int i = a.size() - 1;
    int j = b.size() - 1;
    while (i >= 0 || j >= 0 || x) {
        int sum = x;
        if (i >= 0) sum += a[i--] - '0';
        if (j >= 0) sum += b[j--] - '0';
        c+=((sum % 10) + '0');
        x = sum / 10;
    }
    reverse(c.begin(), c.end());
    return c;
}

高精-高精

string subtract(string n1, string n2) {
    string ans = "";
    int c = 0;
    reverse(n1.begin(), n1.end());
    reverse(n2.begin(), n2.end());
    for (int i = 0; i < n1.length(); i++) {
        int d1 = n1[i] - '0';
        int d2 = (i < n2.length()) ? (n2[i] - '0') : 0;
        int d = d1 - d2 - c;
        if (d < 0) {
            d += 10;
            c = 1;
        } else {
            c = 0;
        }
        ans += (d + '0');
    }
    while (ans.length() > 1 && ans.back() == '0') {
        ans.pop_back();
    }
    reverse(ans.begin(),ans.end());
    return ans;
}

高精/高精

// 大整数加法
string add(string n1, string n2) {
    string ans = "";
    int c = 0;
    reverse(n1.begin(), n1.end());
    reverse(n2.begin(), n2.end());
    int mxlen = max(n1.length(), n2.length());
    for (int i = 0; i < mxlen; i++) {
        int d1 = (i < n1.length()) ? (n1[i] - '0') : 0;
        int d2 = (i < n2.length()) ? (n2[i] - '0') : 0;
        int s = d1 + d2 + c;
        c = s / 10;
        ans += (s % 10) + '0';
    }
    if (c > 0) ans += c + '0';
    reverse(ans.begin(), ans.end());
    while (ans.length() > 1 && ans.back() == '0') {
        ans.pop_back();
    }
    return ans;
}
// 大整数乘法
string multiply(string n1, string n2) {
    string ans = "0";
    reverse(n1.begin(), n1.end());
    for (int i = 0; i < n2.length(); i++) {
        int c = 0;
        string t;
        char d2 = n2[n2.length() - 1 - i];
        if (d2 == '0') {
            t += '0';
            continue;
        }
        for (int j = 0; j < n1.length(); j++) {
            int d1 = n1[j] - '0';
            int p = d1 * (d2 - '0') + c;
            c = p / 10;
            t += (p % 10) + '0';
        }
        if (c > 0) t += c + '0';
        for (int k = 0; k < i; k++) {
            t += '0';
        }
        string s = add(ans, t);
        ans = s;
    }
    return ans;
}

d1/d2保留小数点后d3位

void divide(int d1, int d2, int d3) {
    cout << d1 / d2 << '.';
    int r = d1 % d2;
    for (int i = 0; i < d3; i++) {
        r *= 10;
        cout << r / d2;
        r %= d2;
    }
}
posted on 2025-08-25 21:22  zhao_ry514114  阅读(8)  评论(0)    收藏  举报