您的位置:首页 > 其它

codevs 3115 高精度练习之减法 swap

2016-01-14 15:03 323 查看
注意判断正负 和进位

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: