记录编号 |
234834 |
评测结果 |
AAAAAA |
题目名称 |
增强的减法问题 |
最终得分 |
100 |
用户昵称 |
Riolu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.001 s |
提交时间 |
2016-03-09 17:37:58 |
内存使用 |
0.32 MiB |
显示代码纯文本
/*=========================================*
* Auther: Riolu
* Page: 143
* Time: 2016/3/9
* ©Copyright 2016 Riolu. All Rights Reserved.
*=========================================*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
char aa1[1000],bb1[1000],cc1[1000];
void add(char a1[],char b1[],char c1[]){//a+b=c
int lena,lenb,lenc;
int a[1000],b[1000],c[1000],x,i;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
lena=strlen(a1);
lenb=strlen(b1);
for(i=0;i<lena;i++) //字符串转化为数组
a[lena-i]=a1[i]-48;
for(i=0;i<lenb;i++)
b[lenb-i]=b1[i]-48; //倒序存储
lenc=1; x=0; //x进位缓存
while(lenc<=lena || lenc<=lenb){
c[lenc]=a[lenc]+b[lenc]+x; //相加与进位
x=c[lenc]/10; //进位值
c[lenc]%=10; //取个位
lenc++;
}
c[lenc]=x;
if(c[lenc]==0)
lenc--;
for(i=lenc;i>=1;i--)
c1[lenc-i]=c[i]+48; //倒序返回
c1[lenc]='\0';
}
void minuss(char a2[],char b2[],char c2[]){//a-b=c
int lena,lenb,lenc;
int a[1000],b[1000],c[1000],i,fushu=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
lena=strlen(a2);
lenb=strlen(b2);
if(lena<lenb ||(lena==lenb)&&strcmp(a2,b2)<0)
{ //a1>b1返回正整数
char t[1000]; //交换减数
strcpy(t,a2);
strcpy(a2,b2);
strcpy(b2,t);
int tmp=lena;
lena=lenb;
lenb=tmp;
fushu=1;
}
for(i=0;i<lena;i++) //字符串转化为数组
a[lena-i]=a2[i]-48;
for(i=0;i<lenb;i++)
b[lenb-i]=b2[i]-48; //倒序存储
lenc=1; //位数
while(lenc<=lena || lenc<=lenb){
if(a[lenc]<b[lenc]){ //不够减借位
a[lenc]+=10;
a[lenc+1]--;
}
c[lenc]=a[lenc]-b[lenc]; //相减
lenc++;
}
while((c[lenc]==0)&&(lenc>1)) lenc--;//高位0舍弃
if(fushu==0){
for(i=lenc;i>=1;i--)
c2[lenc-i]=c[i]+48; //倒序返回
c2[lenc]='\0';
}
if(fushu==1){
for(i=lenc;i>=1;i--)
c2[lenc-i+1]=c[i]+48; //倒序返回
c2[lenc+1]='\0';
c2[0]='-';
}
}
int main()
{
freopen("sub.in","r",stdin);
freopen("sub.out","w",stdout);
gets(aa1);gets(bb1);
//add(aa1,bb1,cc1);
minuss(aa1,bb1,cc1);
cout<<cc1;
return 0;
}