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题解汇总
[动规]爱与愁的心痛 [动规]编辑距离 [动规]采药 [动规]创意吃鱼法 [动规]过河卒 [动规]开心的金明 [动规]旅行 [动规]骑士游历 [动规]数字三角形 [动规]最长连号 [动规]装箱问题 [ ...
随机推荐
- c++类的实例化,有没有new的区别
A a; A * a = new a(); 以上两种方式皆可实现类的实例化,有new的区别在于: 1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可 ...
- ExtJs006类别名、备用名
Ext.onReady(function () { //Ext.define 其他配置项 //别名.备用名 Ext.define("User", { config: { name: ...
- 关于php支持的协议与封装协议
<?php /* * php://stdin 标准输入流 * php://stdout 标准输入流 * php://stderr 标准错误流 * php://output 只写的数据流 * ph ...
- php如何开启GD库
GD库是干什么用的呢!它是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片.GD库在php中默认是没有开启的,如果想让它支持图片处理功能,那么就要手 ...
- python自定义排序函数
Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...
- Codecademy学习打卡1
————————————————————————— 想学习编程,并且打算“闭门造车”式的开启我的自学生涯. 前段时间买了一门厚重的“Java从入门到精通”.或许是对代码,电脑编程环境的陌生,再加上纯小 ...
- verilog中读取文件中的字符串_modelsim高级仿真
今天给个程序大家玩玩.因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串.一直copy 函数 UART ("COMM_1"); UART ("COM ...
- 在qt下获取屏幕分辨率
1,在Windows下可以使用 GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取. 2,在Linux下可以使用XDisp ...
- Python type类具体的三大分类:metaclasses,classes,instance
Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...
- 在 Linux RedHatEL6 环境下安装配置 JDK1.7 + Tomcat7.0 + MySQL5.6
RedHatEL6 JDK安装路径: /usr/java/jdk1.7 Tomcat安装路径:/usr/local/tomcat7/ MySQL安装路径: /usr/local/mysql 总共分为以 ...