算法分析

类似加法,可以用竖式求减法。在做减法运算是,需要注意的是:被减数必须大于减数,同时需要处理借位。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main ()
{int a[256],b[256],c[256],lena,lenb,lenc,i;char n[256],n1[256],n2[256];memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));gets(n1);gets(n2);//输入被减数和被减数if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0)){//strcmp()为字符串比较函数,当n1==n2时,返回0;当n1>n2时,返回正整数;当n1<n2时,返回负整数。//处理被减数和减数,交换被减数和减数strcpy(n,n1);strcpy(n1,n2);strcpy(n2,n);cout<<"-";//交换了减数和被减数,结果为负数。}lena=strlen(n1);lenb=strlen(n2);for(i=0;i<=lena-1;i++){//被减数放入a数组a[lena-i]=int(n1[i]-'0');}for(i=0;i<=lena-1;i++){//减数放入b数组b[lena-i]=int(n2[i]-'0');}i=1;while(i<=lena||i<=lenb){if(a[i]<b[i]){//不够减,那么向高位借1当10a[i]+=10;a[i+1]--;}c[i]=a[i]-b[i];i++;}lenc=i;while((c[lenc]==0)&&(lenc>1)){//最高位的0不输出lenc--;}for(i=lenc;i>=1;i--){//输出结果cout<<c[i];}cout<<endl;return 0;
}

升级版代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main ()
{int a[256],b[256],c[256],lena,lenb,lenc,i;char n[256],n1[256],n2[256];memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));cin>>n1>>n2;lena=strlen(n1);lenb=strlen(n2);if(lena<lenb||(lena==lenb&&strcmp(n1,n2)<0)){strcpy(n,n1);strcpy(n1,n2);strcpy(n2,n);cout<<"-";}lena=strlen(n1);lenb=strlen(n2);for(i=0;i<=lena-1;i++)a[lena-i]=n1[i]-'0';for(i=0;i<=lenb-1;i++)b[lenb-i]=n2[i]-'0';i=1;while(i<=lena||i<=lenb){if(a[i]<b[i]){a[i]+=10;a[i+1]--;}c[i]=a[i]-b[i];i++;}lenc=i;bool temp=true;for(i=lenc;i>=1;i--){if(c[i]==0&&temp==true)continue;else temp=false;cout<<c[i];}cout<<endl;return 0;
}

《信息学奥赛一本通》 高精度减法。输入两个正整数,求它们的差。相关推荐

  1. 信息学奥赛一本通(1397:简单算术表达式求值)

    1397:简单算术表达式求值 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 13874     通过数: 10359 [题目描述] 两位正整数的简单算术运算(只考 ...

  2. 《信息学奥赛一本通》 高精度加法。输入两个正整数,求它们的和。

    高精度加法.输入两个正整数,求它们的和. 算法分析 升级版代码 算法分析 输入两个数到两个变量中,然后用赋值语句求它们的和,输出.但是,我们知道,在C++语言中任何数据类型都有一定的表示范围.当两个被 ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  5. 信息学奥赛一本通 1356:计算(calc)

    [题目链接] ybt 1356:计算(calc) [题目考点] 1. 表达式求值 中缀表达式求值 2. 表达式树 表达式树:一棵表达式树可以表示一系列的运算. 表达式树中的结点包括运算符与数值 str ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通(1101:不定方程求解)

    1101:不定方程求解 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 18175     通过数: 14383 [题目描述] 给定正整数a,b,c.求不定方程 a ...

  8. 信息学奥赛一本通(1098:质因数分解)

    1098:质因数分解 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 33021     通过数: 16969 [题目描述] 已知正整数n是两个不同的质数的乘积,试 ...

  9. Knight Moves(信息学奥赛一本通-T1450)

    [题目描述] 编写一个程序,计算一个骑士从棋盘上的一个格子到另一个格子所需的最小步数.骑士一步可以移动到的位置由下图给出. [输入] 第一行给出骑士的数量 n. 在接下来的 3n 行中,每 3 行描述 ...

  10. 信息学奥赛一本通C++语言-----1120:同行列对角线的格

    [题目描述] 输入三个自然数nn,ii,j(1≤i≤n,1≤j≤n)j(1≤i≤n,1≤j≤n),输出在一个n×nn×n格的棋盘中(行列均从11开始编号),与格子(ii,jj)同行.同列.同一对角线的 ...

最新文章

  1. 搞懂限流算法这一篇就够了
  2. 编译器中代码自动对齐快捷键
  3. mysql异地备份_MySQL数据库异地备份与还原方法
  4. 转向与重定向的联系与区别
  5. python爬虫 导出/乱码/中英文夹杂问题解决
  6. 文字转语音怎么做?分享三种配音方法,真人语音很逼真
  7. 上海臻图信息3DGIS+BIM技术助力智慧城市地下综合管廊建设
  8. Guava之Joiner笔记
  9. HDU2586 How far away ?(LCA模板题)
  10. 国外全能免费主页空间
  11. 抽象类(abstract)
  12. GPIO(通用输入/输出接口)
  13. 如何将spine的素材导入unity
  14. 【微信小程序-初级实战】商品/表单编辑
  15. Dijkstra 路径规划算法在二维仿真环境中的应用 -- Python代码实现
  16. 2022第二届中国ESG与可持续发展国际峰会将于11月17日-18日在上海举行
  17. 洛伦兹力的matlab求解,问:由安培力推导洛伦兹力的过程?
  18. git 命令使用(持续更新)
  19. 网站分析平台:百度统计、谷歌统计、网数星,统计平台怎样选择?
  20. ifconfig命令详解,ifconfig命令输出说明

热门文章

  1. POJ 3051 DFS
  2. .net利用程序集的GUID解决程序只能运行一次的问题
  3. 职业化之可以固化的六个工作模式
  4. matlab都有什么接口,介绍MATLAB与C++的几种接口方式
  5. flag push tcp 作用_TCP/IP协议到底在讲什么?
  6. python column stack_Python基础 | pandas中dataframe的整合与形变(merge reshape)
  7. JDK1.10+scala环境的搭建之linux环境(centos6.9)
  8. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法...
  9. HDU 5919 Sequence II 主席树
  10. RealSense开发-Session和SenseManager的几种创建方法