博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

codevs 3115 高精度练习之减法 swap

Posted on 2016-01-14 15:03  shaoweiyi  阅读(187)  评论(0编辑  收藏  举报

注意判断正负 和进位

ps:swap函数还是挺好用的

#include <iostream>
#include<cstdio>
#include <vector>
#include <sstream>
#include <string>
#include <cstring>
#include <cmath>
#include <stack>
#include <algorithm>
using namespace std;

const int MAXL=505;
char al[MAXL];
char bl[MAXL];
char cl[MAXL];
int a[MAXL];
int b[MAXL];
int c[MAXL];

int stra;
int strb;
int ll;


/*void output()
{
   for(int i=0;i<stra;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    for(int i=0;i<strb;i++)
    {
        cout<<b[i]<<" ";
    }
    cout<<endl;
}*/
void witch()
{
    if(strb>stra)
        {
            cout<<"-";
            swap(al,bl);
        }
    else if(stra==strb)
    {
    for(int i=0;i<stra;i++)
     {
        if(bl[i]>al[i])
     {cout<<"-";
            swap(al,bl);}
      else if(bl[i]<al[i]) break;
     }
    }
}

void input()
{
scanf("%s",&al);
getchar();
scanf("%s",&bl);
stra=strlen(al);
strb=strlen(bl);
witch();
stra=strlen(al);
strb=strlen(bl);
}
void rever()
{
    for(int i=0;i<stra;i++)
    {
        a[i]=al[stra-1-i]-'0';///
    }
    for(int i=0;i<strb;i++)
    {
        b[i]=bl[strb-1-i]-'0';///
    }
    //output();
}

void minis()
{
    ///最后一位前需要判断借位,最后一位后不需要判断吧
    ll=max(stra,strb);
    int temp=0;
    for(int i=0;i<ll-1;++i)
    {
     if(a[i]+temp<b[i])
     {
         c[i]=10+a[i]+temp-b[i];
         temp=-1;
     }
     else
     {
         c[i]=a[i]+temp-b[i];
         temp=0;
     }
    }
    c[ll-1]=a[ll-1]+temp-b[ll-1];
}
void output()
{
    for(int i=ll-1;i>=0;--i)
    {
        if(c[i]==0) ll--;
        else break;
    }
    for(int i=ll-1;i>=0;--i)
    {
        cout<<c[i];
    }
    cout<<endl;
}

int main()
{
input();
rever();

minis();
output();

return 0;
}