我觉得应该是没问题的,但却20,大佬求助
查看原帖
我觉得应该是没问题的,但却20,大佬求助
926141
shiTXYY楼主2023/7/23 15:59
#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;
	
}

可能是输入的问题嘛,我觉得这个代码连乘的问题可以解决····

2023/7/23 15:59
加载中...