codeVS 3115 高精度练习之减法
来源:互联网 发布:苹果mac怎么更新不了 编辑:程序博客网 时间:2024/05/28 23:21
时间限制:1s 空间限制:64000KB题目等级:黄金 Gold
题目描述
给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
输入描述
读入两个用空格隔开的正整数
输出描述
输出A-B的值
样例输入
3 12
样例输出
-9
解题思路
1、用字符串形式输入a,b两个大数
2、判断a,b两串长度,即两个数的位数
3、若位数相同,则 ①从最高位开始按位比较,发现a<b就交换两数,使a为两数中较大数 ②从个位开始做减法运算 ③输出结果
若位数不同,则 ①直接比较两数位数,保证a为两数中较大数 ②从个位开始按位做减法,直到较小数b的最高位,把结果存放到新字符串c中 ③把a剩余的位存入c中 ④c的倒序输出即为相减结果
AC代码如下:
#include<iostream>using namespace std;int main(){ string a,b; cin>>a>>b; if( a.length()==b.length() ){ //按位检测,确保a>b for( int i=0;i<a.length();i++ ){ if( a[i]==b[i] ){ continue; } if( a[i]>b[i] ){ break; } if( a[i]<b[i] ){ swap(a,b); cout<<"-"; break; } } //按位做减法 for( int i=a.length()-1;i>=0;i-- ){ if( a[i]>=b[i] ){ a[i]=a[i]-b[i]+'0'; } else{ a[i]=a[i]+10-b[i]+'0'; --a[i-1]; } } cout<<a<<endl; } else{//a,b位数不等 //调整使a>b if( a.length()<b.length() ){ cout<<"-"; swap(a,b); } string c; int lc=0,i,j; for( i=a.length()-1,j=b.length()-1 ; j>=0 ; --i,--j ){ if( a[i]>=b[j] ){ c[lc++]=a[i]-b[j]+'0'; } else{ c[lc++]=a[i]+10-b[j]+'0'; --a[i-1]; } } for( int p=i;p>=0;--p ){ c[lc++]=a[p]; } //避免高位输入0(1234-567输出0667这样的情况) int flag=0; for( int q=lc-1;q>=0;q-- ){ if( c[q]==0 && flag==0 ){ continue; } else if( c[q]!=0 ){ flag=1; cout<<c[q]; } else if( c[q]==0 && flag==1 ){ cout<<c[q]; } } cout<<endl; } return 0;}
0 0
- 高精度-codevs-3115高精度练习之减法
- codevs 3115 高精度练习之减法
- Codevs 3115 高精度练习之减法
- codeVS 3115 高精度练习之减法
- CODEVS 3115高精度练习之减法
- 【codevs】p3115 高精度练习之减法
- 3115 高精度练习之减法
- codevs 高精度减法 3115
- 高精度练习之减法
- 高精度练习之减法
- code[vs] 3115 高精度练习之减法
- p3115 高精度练习之减法
- codevs天梯高精度减法
- wikioi天梯之3115 高精度练习之减法
- 高精度-codevs-3116高精度练习之加法
- 高精度-codevs-3117高精度练习之乘法
- wikioi高精度练习之减法c++
- 【codevs 3115 3116 3117】高精度练习之加/减/乘法
- [2016-10-15]Java中static的使用
- leveldb源码分析
- SQL server 连接字符串
- delphi7 TADODataSet TDBGridExt 简单应用
- Android自动化测试之Robotium之学习一
- codeVS 3115 高精度练习之减法
- 数据结构实验之栈一:进制转换(java实现)
- PHP中foreach的用法和实例
- 旧版本ubuntu更新软件的方法
- android使用HttpURLConnection获取网站源码
- Java线程和多线程(十)——TimerTask
- Web前端开发的问题汇总
- Java基础知识学习之面向对象一
- Linux基础——构建工具链