#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
long long zf[102000];
int main()
{
long long i,j,sum,k;
char a;
int b[4];
int count=0,n=0;
for(a=getchar(),j=0,i=0;a!='\n';a=getchar())
{
if(a>='0'&&a<='9')//是数字
{
j*=10,j+=a-'0';//如果是1则为1,若为123则为123
}
if(a=='+'||a=='*')//为运算符
{
if(count==1)//如果前面有标记过了就是前面为乘法就先乘掉
{
zf[i-1]*=j;//把结果存在a*b的a里
j=0;//复原 ,防止下面第二个if把j又重复存
count=0;//复原
}
if(a=='*')//如果a是乘号那就先标记一下
{
count=1;
}
if(j!=0)//如果正常情况,就先把数字存起来
zf[i++]=j,j=0;
}
}
zf[i]=j;//因为最后a=='\n'是跳出了所以还有最后一个数字没存
if(count==1)//最后一个运算为乘法且还没运算掉
{
zf[i-1]*=zf[i];
i-=1;
count=0;
}
for(j=0,sum=0;j<=i;j++)//这是所有的运算都是加法就全部加起来
{
sum+=zf[j];
if(sum>=10000)
sum%=10000,n=1;//n是作为一个标记
}
if(n==1)//原本sum是大于10000的
{
k=sum;
b[0]=k/1000,b[1]=(k/100)%10,b[2]=(k/10)%10,b[3]=k%10;
for(i=0;i<4;i++)
{
if(b[i]>0)
count=1;//四位中从第一个大于0的位开始输出--并不输出前导0
if(count)
printf("%d",b[i]);
}
}
else//sum小于10000
printf("%lld",sum);
return 0;
}
可能是输入的问题嘛,我觉得这个代码连乘的问题可以解决····