解题思路:
注意事项:
参考代码:
#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语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5229 |
简单的a+b (C语言代码)浏览:626 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:936 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |
三角形 (C语言代码)浏览:904 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:546 |
DNA (C语言描述,蓝桥杯)浏览:1553 |
Tom数 (C语言代码)浏览:725 |
1054题解浏览:462 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2161 |