洛谷 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<algorithm>
  2 #include<cstring>
  3 #include<cstdio>
  4 #include<iostream>
  5
  6 using namespace std;
  7 const int MAXN = 10000 + 5;
  8
  9 struct bign
 10 {
 11     int len;
 12     bool flag;
 13     int num[MAXN];
 14
 15     bign(){len = 0;flag = false;memset(num,0,sizeof(num));}
 16
 17     void clear()
 18     {
 19         len = 0;
 20         flag = false;
 21         memset(num,0,sizeof(num));
 22     }
 23 }ans;
 24
 25 inline void swap(bign &a,bign &b)
 26 {
 27     bign tmp;
 28     tmp = a;
 29     a = b;
 30     b = tmp;
 31 }
 32
 33 bool operator < (bign &a,bign &b)
 34 {
 35     if(a.len < b.len) return true;
 36     if(a.len > b.len) return false;
 37     int len = a.len;
 38     for(int i = 1;i <= len;++ i)
 39     {
 40         if(a.num[i] > b.num[i])
 41             return false;
 42     }
 43     return true;
 44 }
 45
 46 bool operator == (bign &a,bign &b)
 47 {
 48     if(a.len != b.len) return false;
 49     for(int i = 1;i <= a.len;++ i)
 50         if(a.num[i] != b.num[i])
 51             return false;
 52     return true;
 53 }
 54
 55 bign operator - (bign &a,bign &b)
 56 {
 57     ans.clear();
 58     int len;
 59     if(a < b)
 60     {
 61         ans.flag = true;
 62         len = b.len;
 63         for(int i = 1;i <= len;++ i)
 64         {
 65             ans.num[i] += b.num[i] - a.num[i];
 66             if(ans.num[i] < 0) ans.num[i] += 10,ans.num[i+1] --;
 67         }
 68     }
 69     else
 70     {
 71         ans.flag = false;
 72         len = a.len;
 73         for(int i = 1;i <= len;++ i)
 74         {
 75             ans.num[i] += a.num[i] - b.num[i];
 76             if(ans.num[i] < 0) ans.num[i] += 10,ans.num[i+1] --;
 77         }
 78     }
 79     while(!ans.num[len]) len --;
 80     ans.len = len;
 81     return ans;
 82 }
 83
 84 inline bign get()
 85 {
 86     ans.clear();
 87     string s;
 88     cin>>s;
 89     int len = s.length();
 90     for(int i = 0;i < len;++ i)
 91         ans.num[len - i] = s[i]-‘0‘;
 92     ans.len = len;
 93     return ans;
 94 }
 95
 96 inline void print(bign a)
 97 {
 98     if(a.flag) putchar(‘-‘);
 99     int len = a.len;
100     for(int i = len;i >= 1;-- i)
101         printf("%d",a.num[i]);
102     puts("");
103 }
104
105 int main()
106 {
107     bign a,b;
108     a = get();
109     b = get();
110     if(a == b)
111         printf("0\n");
112     else
113         print(a-b);
114     return 0;
115 }
时间: 2024-10-15 14:54:30

洛谷 P2142 高精度减法 题解的相关文章

洛谷P2832 行路难 分析+题解代码【玄学最短路】

洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座山,只能单向通过,并会耗费小X一定时间. 小X现在在1号山,他的目的是n号山,因为那里有火车站. 然而小X的体力是有限的.他每通过一条羊肠小道,就会变得更疲劳,导致他通过任意一条羊肠小道的时间都增加1. 输入格式: 第一行两个数,n,m 第2行到第m+1行,每行3个数A,B,C,表示A.B之间有一条

洛谷 P1219 八皇后 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1219 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是跳

洛谷 P1311 选择客栈 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1311 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费. 两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中.晚上,

洛谷 P1855 榨取kkksc03 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1855 题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkksc03的时间和金钱是有限的,

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

【日常学习】【数学-其他】洛谷1403 约数研究题解

于是又要迎来洛谷那凌然无言以对的题目摘要= = 洛谷1403 约数研究 本题地址:http://www.luogu.org/problem/show?pid=1403 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机"Samuel2"的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩,小联允许用"Samuel2"进行数学研究. 小联最近在研究和约数有关的问题,他统计每个正数N的约数的个数,并以f(N)来表示.现

[NOIP2015提高&amp;洛谷P2678]跳石头 题解(二分答案)

[NOIP2015提高&洛谷P2678]跳石头 Description 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石). 输入格式

【洛谷】P2142 高精度减法

#include<bits/stdc++.h> using namespace std; struct bign{ int len; string s; void length(){ len = s.length(); } bign operator - (const bign x) const { bign ret,a1,a2; a1.len = len; a1.s = s; a2.len = x.len; a2.s = x.s; int l = a1.len; if (a1.len >

洛谷 P1449 后缀表达式 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1449 题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.[email protected].’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输