您当前的位置:首页 > 计算机 > 编程开发 > C语言

高精度减法

时间:04-17来源:作者:点击数:64

题目描述

高精度减法。

输入格式

两个整数 a,b(第二个可能比第一个大)。

输出格式

结果(是负数要输出负号)。

输入输出样例

输入 #1

2

1

输出 #1

1

说明/提示

  • 20% 数据 a,b 在 long long 范围内;
  • 100% 数据 0<a,b<1010086
  • #include<bits/stdc++.h>
  • using namespace std;
  • typedef long long ll;
  • const int MAXSIZE = 10100;
  • string stra,strb;
  • int a[MAXSIZE],b[MAXSIZE],c[MAXSIZE];
  • //模拟竖式运算
  • int reduce(int a[],int b[]){
  • int i(0);
  • while(i<=stra.length() || i<= strb.length()){
  • c[i] = a[i] - b[i];
  • if(c[i]<0){ //如果c[i]<0 说明需要向高位借1
  • a[i+1]--; //高位减1
  • c[i] += 10; //当前位+10
  • }
  • i++;//位数+1
  • }
  • return i;
  • }
  • //倒序将字符串存储到int数组中
  • void init(string s,int n[]){
  • for(int i = s.length()-1;i>=0;i--)
  • n[i] = s[s.length()-i-1]-'0';
  • }
  • //打印结果
  • void print(int a[],int b[]){
  • int n = reduce(a,b);
  • bool isOut(false);//判断符号,控制是否输出
  • for(int i = n-1;i>=0;i--){
  • if(!isOut && c[i] == 0) continue;//如果没有读取到第一个不为0的数字,则不输出
  • //例如54321-54312,进行该运算时c[]={9,0,0,0,0}
  • //倒序输出为00009,而我们不需要前面的0,所以应该从第一个不为0的数字开始输出
  • isOut = true;
  • cout<<c[i];
  • }
  • if(!isOut) cout<<0;//如果循环结束仍未读取到不为0的数字,则输出0
  • }
  • int main(){
  • cin>>stra>>strb;
  • //特判,如果a<b 需要交换a与b,同时输出负号
  • //被减数应为大的数
  • if(stra.length()<strb.length() ||
  • (stra.length()==strb.length() && stra<strb)){
  • string temp = stra;
  • stra = strb;
  • strb = temp;
  • cout<<"-";
  • }
  • init(stra,a);
  • init(strb,b);
  • print(a,b);
  • return 0;
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门