高精度减法

#include<bits/stdc++.h>
using namespace std;
int compare(string s1,string s2)
{
    int i;
    if(s1.length()>s2.length())
        return 0;
    else if(s1.length()<s2.length())
      return 1;
      else
      {
          for(i=0;i<=s1.length();i++)
          {
              if(s1[i]>s2[i])
                return 0;
              else if(s1[i]<s2[i])
                return 1;
          }
      }
      return 0;
}
int main()
{
    string s1,s2;
    int a[100000],b[100000],i,j;
      cin>>s1>>s2;
      memset(a,0,sizeof(a));
      memset(b,0,sizeof(b));
    a[0]=s1.length();
    b[0]=s2.length();
    for(i=1;i<=a[0];i++)
        a[i]=s1[a[0]-i]-'0';
    for(i=1;i<=b[0];i++)
        b[i]=s2[b[0]-i]-'0';
    if(compare(s1,s2)==0)
    {
        for(i=1;i<=a[0];i++)
        {
            a[i]-=b[i];
            if(a[i]<0)
            {
                a[i+1]--;
                a[i]+=10;
            }

        }
        a[0]++;
        while(a[a[0]]==0&&a[0]>1)
        {
            a[0]--;
        }
        for(i=a[0];i>=1;i--)
            cout<<a[i];
        cout<<endl;

    }
    else
    {
        cout<<"-";
        for(i=1;i<=b[0];i++)
        {
            b[i]-=a[i];
            if(b[i]<0)
            {
                b[i]+=10;
                b[i+1]--;
            }

        }
        b[0]++;
        while(b[b[0]]==0&&b[0]>1)
            b[0]--;
            for(i=b[0];i>=1;i--)
                cout<<b[i];
            cout<<endl;

    }


}

1.判断大小时,当长度相同  if(s1[i]>s2[i]) return 0; else return 1; 少考虑了相等的情况;最后若都相同 return 0;

2.剪完后,长度大的数组  长度++;

3. 该方法仅适用 两个正数相加,  若被减数为负  ,  则输出 ’-‘ 转化为两数相加,若,减数为负,则为两数相加.(前两种可以合并,输出时再讨论是否输出’-‘).      均为负数,转换为后一个数-前一个数(全是正数,和全为负数可以合并)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值