题目描述 Description

给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A-B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

-9

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7. char a[],b[];
  8. int c[];
  9. int cp(char a[],char b[])//比较两个大数的大小,a大返回1,b大返回2,一样大返3;
  10. {
  11. int i=strlen(a),j=strlen(b);
  12. if(i>j)return ;
  13. else if(j>i)return ;
  14. else if(i==j)
  15. {
  16. for(int k=; k<j; k++)
  17. {
  18. if(a[k]>b[k])return ;
  19. if(a[k]<b[k])return ;
  20. }
  21. return ;
  22. }
  23. }
  24. int main()
  25. {
  26. memset(c, , sizeof(c));
  27. cin>>a>>b;
  28. int cmp=cp(a,b);
  29. if(cmp==)printf("0\n"); //一样大直接输出0;
  30. int lena=strlen(a);
  31. int lenb=strlen(b);
  32. int i=lena-,j=lenb-,k=;//注意长度减一;
  33. int carry=;//设置进位,开始为0;
  34. while(i>=&&j>=)//先处理两个大数在相同位数那一段相减;模拟手算
  35. {
  36. int cc;//注意a,b转换成int型
  37. if(cmp==)cc=(a[i]-'')-(b[j]-'')-carry;//如果a大,用a-b;
  38. else if(cmp==)cc=(b[j]-'')-(a[i]-'')-carry;//b大,用b-a;
  39. if(cc<)//减了要判断是不是负数
  40. {
  41. c[k++]=cc+;//负数要加10;
  42. carry=;//加10后要向前-1;
  43. i--;j--;
  44. }
  45. else
  46. {
  47. c[k++]=cc;//正数直接赋值
  48. carry=;//进位不用减
  49. i--;j--;
  50. }
  51. }
  52. /* 调试代码,你懂得!
  53. for(int l=k;l>=0;l--)printf("%d",c[l]);printf("\n");
  54. printf("%d %d\n",i,j);
  55. 下面处理多出的那一段;
  56. */
  57. if(cmp==&&i>=){//a长些或者大些就把a多出b的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;
  58. while(i>=){
  59. int cc=a[i--]-''-carry;//同样转int
  60. if(cc<){c[k++]=cc+;carry=;}
  61. else {c[k++]=cc;carry=;}
  62. }
  63. }
  64. if(cmp==&&j>=){//b长些或者大些就把b多出a的部分直接赋值给c,注意同时进位也得继续补上,避免1000-1跪;
  65. while(j>=){
  66. int cc=b[j--]-''-carry;//同样转int
  67. if(cc<){c[k++]=cc+;carry=;}
  68. else {c[k++]=cc;carry=;}
  69. }
  70. }
  71. if(cmp==)printf("-");//b大就输出负号;
  72. int last=;
  73. for(int l=;l<k;l++)if(c[l]!=)last=l;//找出第一个不为0的数
  74. for(int l=last;l>=;l--)printf("%d",c[l]);//因为是从c[0]开始先存个位,所以倒着输出
  75. printf("\n");
  76. return ;
  77. }

wiki oi 3115高精度练习之减法的更多相关文章

  1. wiki oi 3116 高精度练习之加法

    题目描述 Description 给出两个正整数A和B,计算A+B的值.保证A和B的位数不超过500位. 输入描述 Input Description 读入两个用空格隔开的正整数 输出描述 Outpu ...

  2. 【Codevs 3115】高精度练习之减法

    http://codevs.cn/problem/3115/ 板子题~ // <H.cpp> - Sun Oct 9 12:58:23 2016 // This file is made ...

  3. wiki oi 1044 拦截导弹

    题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...

  4. 1214 线段覆盖wiki oi

    题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数.有些线段 ...

  5. c++ 普通高精减

    //c++ 普通高精减 //codevs 3115 高精度练习之减法 //内容简单,就不注释了. //注意下,&&优先级高于||. #include<cstdio>#inc ...

  6. 高精度 - SGU 112 a^b-b^a

    a^b-b^a Problem's Link Mean: 略 analyse: 简单题,只用编个高精度乘法和减法即可. Time complexity: O(N) view code  java im ...

  7. 51Nod 1005 有负数的高精度加法

    51Nod是个好地方啊 题意 51Nod基础题第二题,高精度加法,可能有负数. 解题 如果按照一般的高精度,我们发现要分情况讨论,还要写高精度加法和减法,代码实现有点烦.而初中数学里说,省略加号的和. ...

  8. 【u216】A+B Problem(aplusb)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 对于给定的A和B,求A+B的值. [输入格式] 输入文件aplusb.in的第1行为一个整数A,第2行 ...

  9. 【目录】洛谷|CODEVS题解汇总

    [动规]爱与愁的心痛 [动规]编辑距离 [动规]采药 [动规]创意吃鱼法 [动规]过河卒 [动规]开心的金明 [动规]旅行 [动规]骑士游历 [动规]数字三角形 [动规]最长连号 [动规]装箱问题 [ ...

随机推荐

  1. c++类的实例化,有没有new的区别

    A a; A * a = new a(); 以上两种方式皆可实现类的实例化,有new的区别在于: 1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可 ...

  2. ExtJs006类别名、备用名

    Ext.onReady(function () { //Ext.define 其他配置项 //别名.备用名 Ext.define("User", { config: { name: ...

  3. 关于php支持的协议与封装协议

    <?php /* * php://stdin 标准输入流 * php://stdout 标准输入流 * php://stderr 标准错误流 * php://output 只写的数据流 * ph ...

  4. php如何开启GD库

    GD库是干什么用的呢!它是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片.GD库在php中默认是没有开启的,如果想让它支持图片处理功能,那么就要手 ...

  5. python自定义排序函数

    Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted() ...

  6. Codecademy学习打卡1

    ————————————————————————— 想学习编程,并且打算“闭门造车”式的开启我的自学生涯. 前段时间买了一门厚重的“Java从入门到精通”.或许是对代码,电脑编程环境的陌生,再加上纯小 ...

  7. verilog中读取文件中的字符串_modelsim高级仿真

    今天给个程序大家玩玩.因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串.一直copy 函数 UART ("COMM_1");  UART ("COM ...

  8. 在qt下获取屏幕分辨率

    1,在Windows下可以使用 GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取.   2,在Linux下可以使用XDisp ...

  9. Python type类具体的三大分类:metaclasses,classes,instance

    Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...

  10. 在 Linux RedHatEL6 环境下安装配置 JDK1.7 + Tomcat7.0 + MySQL5.6

    RedHatEL6 JDK安装路径: /usr/java/jdk1.7 Tomcat安装路径:/usr/local/tomcat7/ MySQL安装路径: /usr/local/mysql 总共分为以 ...