高精度减法

高精度减法(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);
10   readln(n2); {处理被减数和减数}
11   if (length(n1)<length(n2)) or (length(n1)=length(n2)) and (n1<n2) then
12   begin
13     n:=n1;n1:=n2;n2:=n;
14     write(’-’) {n1<n2,结果为负数}
15   end;
16   lena:=length(n1); lenb:=length(n2);
17   for i:=1 to lena do a[lena-i+1]:=ord(n1[i])-ord(’0’);
18   for i:=1 to lenb do b[lenb-i+1]:=ord(n2[i])-ord(’0’);
19    i:=1;
20    x:=0;
21    while (i<=lena) or(i<=lenb) do
22    begin
23      x := a[i] - b[i] + 10 + x; {不考虑大小问题,先往高位借10}
24      c[i] := x mod 10 ; {保存第i 位的值}
25      x := x div 10 - 1; {将高位借掉的1减去}
26      i := i + 1
27    end;
28   lenc:=i;
29   while (c[lenc]=0) and (lenc>1) do dec(lenc); {最高位的0 不输出}
30  for i:=lenc downto 1 do write(c[i]);
31  writeln
32 end.
时间: 2024-10-10 08:55:39

高精度减法的相关文章

洛谷 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 792.高精度减法

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

高精度减法?!

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

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

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

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

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char