uacs2024

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

高精度 未解决

洛谷P1601 A+B Problem(高精)

输入格式

分两行输入。0 ≤ a , b ≤ 10^500

复制代码
#include <iostream>
using namespace std;
#include <string>

const int N = 501;
int num1[N],num2[N],res[N];
int p,q;

int main() {
    string s1,s2;
    cin >> s1 >> s2;
    int size1 = s1.size(),size2 = s2.size();
    //按照人类理解的方式存储两个数,低位放低位,高位放高位
    for(int i = size1-1;i >= 0;i--)  num1[p++] = s1[i]-'0';
    for(int i = size2-1;i >= 0;i--)  num2[q++] = s2[i]-'0';

    p = p > q ? p : q;  //将两个数中更大的位数记为p,其实就是max(size1,size2)
    int t = 0;
    for(int i = 0; i < p; i++){
        t = t + num1[i] + num2[i];
        res[i] = t % 10;
        t /= 10;
    }
    if(t > 0){
        res[p] = 1;cout << "1";
    }
    for(int i = p - 1;i >= 0;i--)  cout << res[i];
}
复制代码

 

洛谷P2142 高精度减法

输入格式

两个整数 a,b(第二个可能比第一个大)。 0 ≤ a , b ≤ 10^10086

输出格式

结果(是负数要输出负号)。

复制代码
#include <iostream>
using namespace std;
#include <string>
#include <algorithm>

const int N = 10087;
int num1[N],num2[N],res[N];
int p,q;

int main() {
    string s1,s2;
    cin >> s1 >> s2;
    if(s1 == s2){
        cout << "0";return 0;  //如果不加这个判断,那么将会什么也不输出
    }
    int size1 = s1.size(),size2 = s2.size();
    //只有位数相等的情况下的直接比大小才是人类所理解的两个数比大小
    if(size1 < size2 || (size1 == size2 && s1 < s2)){
        swap(s1,s2);swap(size1,size2);
        cout << "-";
    }

    for(int i = size1-1;i >= 0;i--)  num1[p++] = s1[i]-'0';
    for(int i = size2-1;i >= 0;i--)  num2[q++] = s2[i]-'0';

    p = p > q ? p : q;

    for(int i = 0; i < p; i++){
        if(num1[i] >= num2[i])  res[i] = num1[i] - num2[i];
        else{
            res[i] = num1[i] - num2[i] + 10;num1[i+1]--;
        }
    }

    while(res[p-1] == 0) p--;//防止结果前面打印了很多个0
    for(int i = p - 1;i >= 0;i--)  cout << res[i];
}
复制代码

 

洛谷P1303 A*B Problem

题目描述

给出两个非负整数,求它们的乘积。

输入格式

输入共两行,每行一个非负整数。每个非负整数不超过 10^2000

输出格式

输出一个非负整数表示乘积。

复制代码
#include <iostream>
using namespace std;
#include <string>
#include <algorithm>

const int N = 2001;
int num1[N],num2[N],res[N*2];
int p,q;

int main() {
    string s1,s2;
    cin >> s1 >> s2;
    if(s1 == "0" || s2 == "0"){
        cout << "0";return 0;
    }
    
    int size1 = s1.size(),size2 = s2.size();
    if(size1 < size2){
        swap(s1,s2);swap(size1,size2);//保证两个数的位数相同,或者第一个数a比第二个数b的位数要多
    }
    
    for(int i = size1-1;i >= 0;i--)  num1[p++] = s1[i]-'0';
    for(int i = size2-1;i >= 0;i--)  num2[q++] = s2[i]-'0';

    for(int i = 0; i < size2; i++){
        int t = 0;//t代表进多少位
        int j;  //j代表第二个数b的各个位的乘法
        for(j = 0;j < size1;j++){
            t = num1[j] * num2[i] + t;
            res[j + i] = res[j + i] + t % 10;
            if(res[j + i] >= 10){
                res[j + i] -= 10;res[j + i + 1]++;
            }
            t /= 10;
        }
        res[j + i] = res[j + i] + t;
    }
    
    if(res[size1+size2-1] != 0)  cout << res[size1+size2-1];
    for(int i = size1 + size2 - 2; i >= 0;i--)  cout << res[i];
}
复制代码

 高精度除法:???

posted on   ᶜʸᵃⁿ  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示