首页 > 其他 > 详细

codevs 3115 高精度练习之减法 swap

时间:2016-01-14 16:08:14      阅读:256      评论:0      收藏: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;
}

 

codevs 3115 高精度练习之减法 swap

原文:http://www.cnblogs.com/weiweiyi/p/5130273.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!