wiki oi 3115高精度练习之减法
给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
读入两个用空格隔开的正整数
输出A-B的值
3 12
-9
两个正整数的位数不超过500位
代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
char a[],b[];
int c[];
int cp(char a[],char b[])//比较两个大数的大小,a大返回1,b大返回2,一样大返3;
{
int i=strlen(a),j=strlen(b);
if(i>j)return ;
else if(j>i)return ;
else if(i==j)
{
for(int k=; k<j; k++)
{
if(a[k]>b[k])return ;
if(a[k]<b[k])return ;
}
return ;
}
}
int main()
{
memset(c, , sizeof(c));
cin>>a>>b;
int cmp=cp(a,b);
if(cmp==)printf("0\n"); //一样大直接输出0;
int lena=strlen(a);
int lenb=strlen(b);
int i=lena-,j=lenb-,k=;//注意长度减一;
int carry=;//设置进位,开始为0;
while(i>=&&j>=)//先处理两个大数在相同位数那一段相减;模拟手算
{
int cc;//注意a,b转换成int型
if(cmp==)cc=(a[i]-'')-(b[j]-'')-carry;//如果a大,用a-b;
else if(cmp==)cc=(b[j]-'')-(a[i]-'')-carry;//b大,用b-a;
if(cc<)//减了要判断是不是负数
{
c[k++]=cc+;//负数要加10;
carry=;//加10后要向前-1;
i--;j--;
}
else
{
c[k++]=cc;//正数直接赋值
carry=;//进位不用减
i--;j--;
}
}
/* 调试代码,你懂得!
for(int l=k;l>=0;l--)printf("%d",c[l]);printf("\n");
printf("%d %d\n",i,j);
下面处理多出的那一段;
*/
if(cmp==&&i>=){//a长些或者大些就把a多出b的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;
while(i>=){
int cc=a[i--]-''-carry;//同样转int
if(cc<){c[k++]=cc+;carry=;}
else {c[k++]=cc;carry=;}
}
}
if(cmp==&&j>=){//b长些或者大些就把b多出a的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;
while(j>=){
int cc=b[j--]-''-carry;//同样转int
if(cc<){c[k++]=cc+;carry=;}
else {c[k++]=cc;carry=;}
}
}
if(cmp==)printf("-");//b大就输出负号;
int last=;
for(int l=;l<k;l++)if(c[l]!=)last=l;//找出第一个不为0的数
for(int l=last;l>=;l--)printf("%d",c[l]);//因为是从c[0]开始先存个位,所以倒着输出
printf("\n");
return ;
}
wiki oi 3115高精度练习之减法的更多相关文章
- wiki oi 3116 高精度练习之加法
题目描述 Description 给出两个正整数A和B,计算A+B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Outpu ...
- 【Codevs 3115】高精度练习之减法
http://codevs.cn/problem/3115/ 板子题~ // <H.cpp> - Sun Oct 9 12:58:23 2016 // This file is made ...
- wiki oi 1044 拦截导弹
题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...
- 1214 线段覆盖wiki oi
题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段 ...
- c++ 普通高精减
//c++ 普通高精减 //codevs 3115 高精度练习之减法 //内容简单,就不注释了. //注意下,&&优先级高于||. #include<cstdio>#inc ...
- 高精度 - SGU 112 a^b-b^a
a^b-b^a Problem's Link Mean: 略 analyse: 简单题,只用编个高精度乘法和减法即可. Time complexity: O(N) view code java im ...
- 51Nod 1005 有负数的高精度加法
51Nod是个好地方啊 题意 51Nod基础题第二题,高精度加法,可能有负数. 解题 如果按照一般的高精度,我们发现要分情况讨论,还要写高精度加法和减法,代码实现有点烦.而初中数学里说,省略加号的和. ...
- 【u216】A+B Problem(aplusb)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 对于给定的A和B,求A+B的值. [输入格式] 输入文件aplusb.in的第1行为一个整数A,第2行 ...
- 【目录】洛谷|CODEVS题解汇总
[动规]爱与愁的心痛 [动规]编辑距离 [动规]采药 [动规]创意吃鱼法 [动规]过河卒 [动规]开心的金明 [动规]旅行 [动规]骑士游历 [动规]数字三角形 [动规]最长连号 [动规]装箱问题 [ ...
随机推荐
- Node.js 小工具--supervisor
Node.js 在写文件的时候 一旦更改.每次都得重新运行 app.js. 很麻烦. supervisor 工具可以帮助你 监听文件改动,自动重启. sudo npm install -g super ...
- 搜索(BFS)
Problem B: Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and t ...
- BZOJ 1834: [ZJOI2010]network 网络扩容(最大流+最小费用最大流)
第一问直接跑最大流.然后将所有边再加一次,费用为扩容费用,容量为k,再从一个超级源点连一条容量为k,费用为0的边到原源点,从原汇点连一条同样的边到超级汇点,然 后跑最小费用最大流就OK了. ---- ...
- HDU1171-Big Event in HDU
描述: Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don ...
- ThinkPHP第十五天(setField、setInc、setDec、关联模型)
1.ThinkPHP中的比较特殊连贯操作 如果要更新某个字段可以用setField方法,比如M('user')->where('id=1')->setField('username','T ...
- codeforces 613A. Peter and Snow Blower
题目链接 给一个多边形, 一个多边形外的定点, 求这个点距离多边形的最短距离和最长距离. 最长距离肯定是和某个顶点的连线, 而最短距离是和点的连线或是和某条边的连线. 对于一条边上的两个点a, b, ...
- javascript学习笔记(window .alert 是什么)
<script language="javascript"> var abc="25"; window .alert(abc); </scri ...
- Windows Azure HDInsight 支持预览版 Hadoop 2.2 群集
Windows Azure HDInsight 支持预览版 Hadoop 2.2 群集 继去年 10 月推出 Windows Azure HDInsight 之后,我们宣布 Windows Az ...
- 常用 API
运行 Java 程序的参数.使用 Scanner 获取键盘输入.使用 BufferedReader 获取键盘输入.System类.Runtime类.Object类.Java 7新增的 Objects ...
- Node.cluster
nodejs是一个单进程单线程的引擎,只能利用到单个cpu进行计算,面对当今服务器性能的提高,cpu的利用率显然对node应有的性能大打折扣,面对这个问题,cluster应运而生. cluster介绍 ...