解题思路:
注意事项:
参考代码:
#include<cstdio>
using namespace std;
const int N=10001;
int a[N],b[N];
char op,k;
bool key,mark;
inline void swap(int &a,int &b)
{
a+=b;
b=a-b;
a-=b;
return;
}
inline void deal(int *a)
{
int len=a[0]>>1;
for(int i=1;i<=len;i++)
swap(a[i],a[a[0]+1-i]);
return;
}
void out(int *a)
{
for(int i=a[0]?a[0]:1;i>0;i--)
printf("%d",a[i]);
return;
}
inline void add(int *a,int *b)
{
a[0]=(a[0]>b[0]?a[0]:b[0])+1;
b[0]=0;
for(int i=1;i<=a[0];++i)
{
a[i]+=b[i];
b[i]=0;
if(a[i]>9)
a[i]-=10,++a[i+1];
}
while(a[0]>1&&!a[a[0]])
--a[0];
return;
}
inline void yunsuan(const char &op,int *a,int *b)
{
deal(b);
switch(op)
{
case('+'):
add(a,b);
break;
}
return;
}
inline bool check(const char &k,char &op,int *a,int *b)
{
switch(k)
{
case('+'):
yunsuan(op,a,b),op=k;
return true;
default:
return false;
}
}
int main()
{
while(k!=-1&&k!=10&&~(k=getchar()))
{
if(check(k,op,a,b))
{
deal(a);
key=0;
mark=true;
while(~(k=getchar())&&k!=10)
if(check(k,op,a,b))
key=false;
else if(k>='0'&&k<='9')
{
if(key)
b[++b[0]]=k-48;
else if(k!=48)
b[++b[0]]=k-48,key=true;
}
}
else if(k>='0'&&k<='9')
{
if(key)
a[++a[0]]=k-'0';
else if(k!='0')
a[++a[0]]=k-'0',key=true;
}
}
if(!mark)
deal(a);
yunsuan(op,a,b);
out(a);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复