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题解汇总
[动规]爱与愁的心痛 [动规]编辑距离 [动规]采药 [动规]创意吃鱼法 [动规]过河卒 [动规]开心的金明 [动规]旅行 [动规]骑士游历 [动规]数字三角形 [动规]最长连号 [动规]装箱问题 [ ...
随机推荐
- 【转载】设置event.cancelBubble,使触发子元素的onclick不同时触发父元素的onclick
由于HTML中的对象都是层次结构,比如一个Table包含了多个TR,一个TR包含了多个TD Bubble就是一个事件可以从子节点向父节点传递,比如鼠标点击了一个TD,当前的event.srcEleme ...
- asp.net 分页的制作
/// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页& ...
- c++ primer plus 习题答案(5)
p333.7 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; ...
- linux中的fork()函数以及标准I/O缓冲
1. fork()创建的新进程成为子进程.一次调用,两次返回,子进程的返回值是0,而父进程的返回值是新子进程的进程ID,如果出现错误,fork返回一个负值. 2. 可以通过fork返回的值来判断当前进 ...
- phplib系统开发经验总结
数据库设计: 数据库的设计一定要在了解整个系统需求的情况下,把数据库设计,及ER图画出来,数据库字典也要及时把握,只有掌握了这些才能下手开始设计界面,后期如果有需要,可以在数据库中添加数据,但要及时更 ...
- UIWebView的三种加载方式
一.使用UIWebView 将web content 嵌入到应用上. API提供了三种方法: - (void)loadRequest:(NSURLRequest *)request; - (void) ...
- Java web 开发环境配置。
一.配置 win8 64位 环境java 开发环境 1. 下载JDK,地址 http://www.oracle.com/technetwork/java/javase/downloads/index ...
- Tomcat embed
http://www.iflym.com/index.php/code/use-embeded-tomcat-to-javaee-start-tomcat.html http://java.dzone ...
- 过目不忘JS正则表达式(转)
正则表达式,有木有人像我一样,学了好几遍却还是很懵圈,学的时候老明白了,学完了忘光了.好吧,其实还是练的不够,所谓温故而知新,可以为师矣,今天就随我来复习一下这傲娇的正则表达式吧. 为啥要有正则表达式 ...
- php订单生成唯一Id
一般用到一个函数: uniqid(prefix,more_entropy) 参数 描述 prefix 可选.为 ID 规定前缀.如果两个脚本恰好在相同的微秒生成 ID,该参数很有用. more_ent ...