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 using namespace std;
 6 const int MAXN=100001;
 7 char a1[MAXN],b1[MAXN];
 8 int a[MAXN],b[MAXN];
 9 int ans[MAXN];
10 int main()
11 {
12     scanf("%s%s",a1,b1);
13     int la=strlen(a1);
14     int lb=strlen(b1);
15     if(la<lb||(la==lb&&a1[0]<b1[0]))
16     {
17         printf("-");
18         swap(a1,b1);
19         swap(la,lb);
20     }
21     for(int i=0;i<la;i++)
22     a[i]=a1[la-i-1]-48;
23     for(int i=0;i<lb;i++)
24     b[i]=b1[lb-i-1]-48;
25     int lc=max(la,lb);
26     for(int i=0;i<lc;i++)
27     {
28         if(a[i]<b[i])
29         {
30             a[i+1]--;
31             a[i]=a[i]+10;
32         }
33         ans[i]=a[i]-b[i];
34     }
35     int flag=0;
36     for(int i=lc;i>=0;i--)
37     {
38         if(flag==0&&ans[i]==0&&i>0)continue;
39         else flag=1;
40         printf("%d",ans[i]);
41     }
42     return 0;
43 }
时间: 2024-07-30 21:35:13

P2142 高精度减法的相关文章

洛谷 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

【洛谷】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 >

高精度减法

高精度减法(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);

C++ 该死的高精度减法

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

AcWing 792.高精度减法

AcWing 792.高精度减法 题目描述 给定两个正整数,计算它们的差,计算结果可能为负数. 输入格式 共两行,每行包含一个整数. 输出格式 共一行,包含所求的差. 数据范围 1≤整数长度≤105 输入样例 32 11 输出样例 21 题目思路 低角标存低位,高角标存高位:依次进位 #include<iostream> #include<string> #include<vector> using namespace std; bool cmp(vector<i

高精度减法?!

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

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

减法: #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);

C# 高精度减法 支持小数(待优化)

是现实思路 1,先小数点补位,8913758923475893274958738945793845-4893127498372459823745324532453245.284929384729837498237492 => 8913758923475893274958738945793845.000000000000000000000000-4893127498372459823745324532453245.284929384729837498237492. 2,进行计算,最后补符号 pub

2018-3刷题记录(to be continued)

3-1 P1880 [NOI1995]石子合并 3-2 P1508 Likecloud-吃.吃.吃 P1387 最大正方形 3-3 P1417 烹调方案 P1855 榨取kkksc03 P1736 创意吃鱼法 P1541 乌龟棋 3-4//留坑:高精.标签 P1203 [USACO1.1]坏掉的项链Broken Necklace P1582 倒水 P1338 末日的传说 P1372 又是毕业季I P1865 A % B Problem P1233 木棍加工 P1315 观光公交 P1080 国王