高精度运算(c++)

写个板子在这 以防以后可能会忘了

高精度加法

#include <bits/stdc++.h>
using namespace std;

string a;
string b;

string res;

int main() {

	cin >> a >> b;
	int len1 = a.size();
	int len2 = b.size();
	if (len1 < len2) {
		for (int i = 0; i < len2 - len1; i++) {
			a = "0" + a;

		}
	} else {
		for (int i = 0; i < len1 - len2; i++) {
			b = "0" + b;
		}
	}


	int len = a.size();
	int temp;
	int cf = 0;
	for (int i = len - 1; i >= 0; i--) {
		temp = a[i] - '0' + b[i] - '0' + cf;
		cf = temp / 10;
		temp = temp % 10;
		res = char(temp + '0') + res;
	}
	if (cf == 1) {
		res = char(cf + '0') + res;
	}
	cout << res << endl;
	return 0;

}

高精度减法

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

string a, b;
string res;

int main() {
    cin >> a >> b;
    int len1 = a.size(), len2 = b.size();
    bool negative = false;

    // 补零对齐
    if (len1 < len2) {
        a = string(len2 - len1, '0') + a;
        len1 = len2;
    } else if (len2 < len1) {
        b = string(len1 - len2, '0') + b;
        len2 = len1;
    }

    // 比较大小,确定符号
    if (a < b) {
        swap(a, b);
        negative = true;
    }

    int cf = 0;
    for (int i = len1 - 1; i >= 0; --i) {
        int temp = (a[i] - '0') - (b[i] - '0') + cf;
        cf = 0;
        if (temp < 0) {
            temp += 10;
            cf = -1;
        }
        res.push_back(temp + '0');
    }

    // 去除前导零
    while (res.size() > 1 && res.back() == '0') res.pop_back();
    reverse(res.begin(), res.end());

    if (negative) cout << '-';
    cout << res << endl;

    return 0;
}

高精度乘法

#include <bits/stdc++.h>
using namespace std;

char a1[10001],b1[10001];
int a[10001],b[10001],i,x,len,j,c[10001];
int main ()
{
    cin>>a1>>b1;
    int lena=strlen(a1);
	int lenb=strlen(b1);
    for(i=1;i<=lena;i++)a[i]=a1[lena-i]-'0';
    for(i=1;i<=lenb;i++)b[i]=b1[lenb-i]-'0';
    for(i=1;i<=lenb;i++){
	for(j=1;j<=lena;j++){
		c[i+j-1]+=a[j]*b[i];
	}
    }
	
    for(i=1;i<lena+lenb;i++){
    	if(c[i]>9){
		c[i+1]+=c[i]/10;
		c[i]%=10;
		}
	}
	len=lena+lenb;
    while(c[len]==0&&len>1)len--;
    for(i=len;i>=1;i--)cout<<c[i];
    return 0;
}

高精度除法(高精除以低精)

#include <bits/stdc++.h>
using namespace std;

char a1[10001];
long long b,c[10001],d,a[10001],len,lenc;
int main ()
{
    cin >>a1 >>b;
    len=strlen(a1);
    for (int i=1;i<=len;i++)a[i]=a1[i-1]-'0';
    for (int i=1;i<=len;++i)
    {                                
        c[i]=(d*10+a[i])/b;
        d=(d*10+a[i])%b;
    }
    lenc=1;
    while (c[lenc]==0&&lenc<len)lenc++;
    for (int i=lenc;i<=len;++i)cout <<c[i]; 
    return 0;
}

阶乘之和

#include <bits/stdc++.h>
using namespace std;

int n;
int cur[205] = {0};  // 存储当前阶乘值
int res[205] = {0};  // 存储累加和

int main() {
    cin >> n;
    
    // 初始化:1! = 1
    int cur_len = 1, res_len = 1;
    cur[0] = 1;
    res[0] = 1;

    for (int i = 2; i <= n; i++) {
        // 计算当前阶乘 cur = cur * i
        int carry = 0;
        for (int j = 0; j < cur_len; j++) {
            int temp = cur[j] * i + carry;
            cur[j] = temp % 10;
            carry = temp / 10;
        }
        // 处理剩余进位
        while (carry > 0) {
            cur[cur_len++] = carry % 10;
            carry /= 10;
        }

        // 将当前阶乘加到结果 res += cur
        carry = 0;
        int max_len = max(res_len, cur_len);
        for (int j = 0; j < max_len; j++) {
            int sum = res[j] + (j < cur_len ? cur[j] : 0) + carry;
            res[j] = sum % 10;
            carry = sum / 10;
        }
        // 处理剩余进位
        res_len = max_len;
        if (carry > 0) {
            res[res_len++] = carry;
        }
    }

    // 输出结果(高位在后需要逆序)
    for (int i = res_len - 1; i >= 0; i--) {
        cout << res[i];
    }
    return 0;
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇