AcWing 792.高精度减法

AcWing 792.高精度减法

题目描述

给定两个正整数,计算它们的差,计算结果可能为负数。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤105

输入样例

32
11

输出样例

21

题目思路

低角标存低位,高角标存高位;依次进位

#include<iostream>
#include<string>
#include<vector>
using namespace std;

bool cmp(vector<int> &A,vector<int> &B)
{
    if(A.size()!=B.size()) return A.size() > B.size();
    for(int i=A.size();i>=0;i--)
        if(A[i]!=B[i]) return A[i] > B[i];
    return true;
}

vector<int> sub(vector<int> &A,vector<int> &B)
{
    vector<int> C;
    for(int i=0, t=0; i<A.size(); i++)
    {
        t += A[i];
        if(i<B.size()) t -= B[i];
        C.push_back((t+10)%10);
        if(t>=0) t = 0;
        else t = -1;
    }
    while(C.size()>1 && C.back()==0) C.pop_back();
    return C;
}

int main()
{
    string a,b;
    cin >> a >> b;
    vector<int> A,B,C;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i] - '0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i] - '0');

    if(cmp(A,B)) C = sub(A,B);
    else C = sub(B,A),printf("-");

    for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);

    return 0;
}

原文地址:https://www.cnblogs.com/fsh001/p/12242454.html

时间: 2024-10-10 09:35:31

AcWing 792.高精度减法的相关文章

高精度减法

高精度减法(a-b)(a>b且a,b均为正整数) .从键盘读入两个正整数,求它们的差. 分析:类似加法,可以用竖式求减法.在做减法运算时,需要注意的是:被减数必须比减数大,同时需要处理借位.高精度减法的参考程序: 1 program exam2; 2 const 3 max=200; 4 var 5 a,b,c:array[1..max] of 0..9; 6 n,n1,n2:string; 7 lena,lenb,lenc,i,x:integer; 8 begin 9 readln(n1);

洛谷 P2142 高精度减法 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接 :https://www.luogu.org/problem/show?pid=1581 题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 2 1 输出样例#1: 1 说明 20%数据a,b在long long范围内 100%数据0<a,b<=10的10000次方 AC代码: 1 #include<alg

C++ 该死的高精度减法

没看书直接硬上的结果是,一个简单的高精度减法我用了一个多小时只写了一个90分的代码.之前准备NOIP的时候确实是学了,可惜现在早就还给老师了. 结果回家一看标准程序,顿时有种想哭的赶脚. 先上我的90分代码: //高精度减法 #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector>

P2142 高精度减法

题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 2 1 输出样例#1: 1 说明 20%数据a,b在long long范围内 100%数据0<a,b<=10的10000次方 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 usin

AcWing 793.高精度乘法

AcWing 793.高精度乘法 题目描述 给定两个正整数A和B,请你计算A * B的值. 输入格式 共两行,第一行包含整数A,第二行包含整数B. 输出格式 共一行,包含A * B的值. 数据范围 1≤A的长度≤100000, 1≤B≤10000 输入样例 2 3 输出样例 6 题目思路 低角标存低位,高角标存高位:依次进位,用A[i]乘整个b #include<iostream> #include<string> #include<vector> using name

AcWing 794.高精度除法

AcWing 794.高精度除法 题目描述 给定两个正整数A,B,请你计算 A / B的商和余数. 输入格式 共两行,第一行包含整数A,第二行包含整数B. 输出格式 共两行,第一行输出所求的商,第二行输出所求余数. 数据范围 1≤A的长度≤100000, 1≤B≤10000 输入样例 7 2 输出样例 3 1 题目思路 低角标存低位,高角标存高位:按位依次向后除,A[i]除整个b,余数进位 #include<iostream> #include<string> #include&l

高精度减法,在做小减大时可花了我不少时间!

减法: #include<stdio.h> #include<string.h> int main() { char s1[1000]; int a[1000]={0},b[1000]={0},c[1000]={0},l1=0,l2=0,l=0,i,x; scanf("%s",s1); l1=strlen(s1); for(i=0;i<=l1-1;i++) { a[l1-1-i]=s1[i]-'0'; } scanf("%s",s1);

高精度减法?!

高精减 接着上一篇的继续啦!!! 嗯输入就不再讲一遍了.存储和之前是一样的,倒序存储. 减法需要借位,所以解决减法借位是关键. 方法如下: if(a[i]<b[i]){ --a[i+1];//向上一位借一做十 a[i+=10]; } c[i]=a[i]-b[i];//逐位相减 这样就可以处理借位问题. 当然,在减法中还有一个需要处理的问题,当然这个问题很重要 减法中有被减数和减数的说法,当被减数<减数时,就需要解决结果是负数的问题 因为编译器中不可能直接检测出负数,所以这个时候就需要判断两数的

AcWing&#160;791.&#160;高精度加法 解题记录

题目地址 https://www.acwing.com/problem/content/description/793/ 题目描述给定两个正整数,计算它们的和. 输入格式共两行,每行包含一个整数. 输出格式共一行,包含所求的和. 算法很明显 输入会超过64位 也就是即使long long 类型也不能进行常规加法那么输入就是用string 接收字符串 来模拟加法 加法主要是三个数字的相加 数字a 数字b 以及进位所以 int sum = (a - '0') + (b - '0') + next;然