1 条题解

  • 0
    @ 2024-10-27 19:04:47

    题解:

    【解题思路】

    本题因为需要判断与1e18的大小关系,直接计算有可能会产生溢出问题,所以本题考虑使用高精度乘法实现

    注意:需对0进行特判

    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    int a[N],b[N],c[N];
    int main(){
    	int n,flag=0,as;
    	cin>>n;
    	string str1;
    	cin>>str1;
    	for(int i=0;i<str1.size();i++) a[str1.size()-1-i]=str1[i]-'0';
    	as=str1.size();
    	for(int k=2;k<=n;k++){
    		string str2;
    		cin>>str2;
    		if(str2.size()==1&&str2[0]=='0') flag=2;
    		if(flag==1||flag==2) continue;
    		memset(b,0,sizeof(b));
    		memset(c,0,sizeof(c));
    		for(int i=0;i<str2.size();i++) b[str2.size()-1-i]=str2[i]-'0';
    		for(int i=0;i<as;i++){
    			for(int j=0;j<str2.size();j++){
    				c[j+i]+=a[i]*b[j];
    				c[j+1+i]+=c[j+i]/10;
    				c[j+i]%=10;
    			}
    		}
    		as=as+str2.size();
    		while(c[as-1]==0&&as>1) as--;
    		cout<<endl; 
    		if(as>=19){
    			flag=1;
    		}
    		else{
    			memset(a,0,sizeof(a));
    			for(int i=0;i<as;i++)
    			a[i]=c[i];
    		}
    	}
    	if(flag==0) 
    	    for(int i=0;i<as;i++) cout<<a[as-i-1];
    	else if(flag==1) cout<<-1;
    	else cout<<0;
    	return 0;
    } 
    
    

    • 1

    信息

    ID
    223
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    370
    已通过
    24
    上传者