p3115 高精度练习之减法

来源:互联网 发布:预防网络成瘾的方法 编辑:程序博客网 时间:2024/05/17 17:44

题目描述 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位

#include<iostream>  #include<string>  using namespace std;  int* sub(int x[2000],int y[2000])  {      int *c=new int[2000]();      int i=0;      while (i<1999)      {          if (x[i]-y[i]+c[i]<0){              c[i+1]--;              c[i]=c[i]+10;        }        c[i]=(x[i]-y[i]+c[i])%10;          i++;      }      return  c;  }  int main()  {      string a,b;      int x[2000]={0},y[2000]={0},lena,lenb;      cin>>a>>b;      lena=a.length();      lenb=b.length();      for (int i=lena-1;i>=0;i--)          x[lena-i-1]=(int)(a[i]-48);      for (int i=lenb-1;i>=0;i--)          y[lenb-i-1]=(int)(b[i]-48);      int *c;    if (lena>lenb)   c=sub(x,y);elseif (lenb>lena){cout<<'-';c=sub(y,x);}elseif (a>b)c=sub(x,y);else{cout<<'-';c=sub(y,x);}    int i=1999;      while (c[i]==0)          i--;      for (;i>=0;i--)          cout<<c[i];      delete[] c;      return 0;  }  


0 0
原创粉丝点击