4 solutions

  • 2
    @ 2024-1-20 11:48:41
    #include<bits/stdc++.h>
    using namespace std;
    int l1,l2;
    int chengshu1[1005],chengshu2[1005],ji[1005]={0};//三个数组,分别存储两个乘数与积,要开到1005,本人亲测205会寄 
    void input(string s,int a[]){//输入函数,具体功能不多赘述 
    	int len=s.length();
    	for(int i=0;i<len;i++){
    		a[len-i-1]=s[i]-'0';
    	}
    }
    void APAmul(int a[],int b[],int c[]){//高精度乘法函数 
    	for(int i=0;i<1004;++i){//这里i<1004是因为数组长度是1005
    		for(int j=0;j<=i;++j){
    			c[i]+=a[j]*b[i-j];//分别叠加 
    		}
    		if(c[i]>=10){//进位 
    			c[i+1]+=c[i]/10;
    			c[i]%=10; 
    		}
    	} 
    }
    void output(int d[]){//输出函数 
    	int i;
    	for(i=1004;i>=1;--i){//此处同理 
    		if(d[i]!=0)break;//寻找前导0结束的位置 
    	}
    	for(;i>=0;--i){
    		cout<<d[i];
    	}
    	cout<<"\n";
    }
    int main(){
    	string n1,n2;
    	cin>>n1>>n2;
    	input(n1,chengshu1);//分别存储两个乘数 
    	input(n2,chengshu2);
    	APAmul(chengshu1,chengshu2,ji);//进行高精度乘法 
    	output(ji);
    	return 0;
    } 
    
    • 1
      @ 2023-10-24 20:06:11
      #include <bits/stdc++.h>
      using namespace std;
      int a[205],b[205],c[405];
      string s1,s2;
      int main(int argc, char **argv){
      	cin >> s1 >> s2;
      	int l1 = s1.length(),l2 = s2.length();
      	for (int i = 0;i < l1;i++){
      		a[l1 - i] = s1[i] - '0';
      	}
      	for (int i = 0;i < l2;i++){
      		b[l2 - i] = s2[i] - '0';
      	}
      	int jw = 0;
      	for (int i = 1;i <= l1;i++){
      		jw = 0;
      		for (int j = 1;j <= l2;j++){
      			c[i + j - 1] = a[i] * b[j] + jw + c[i + j - 1];
      			jw = c[i + j - 1] / 10;
      			c[i + j - 1] %= 10;
      		}
      		c[i + l2] = jw;
      	}
      	int l3 = l1 + l2;
      	while(c[l3] == 0){
      		l3--;
      	}
      	for (int i = l3;i > 0;i--){
      		cout << c[i];
      	}
      	return 0;
      }
      
      • 0
        @ 2025-3-19 14:03:00
        #include <bits/stdc++.h>
        using namespace std;
        string a,b;
        int numa[300],numb[300],sum[600]={0};
        int main() {
        	cin>>a>>b;
        	for(int i=0;i<a.size();i++)numa[i]=a[a.size()-1-i]-'0';
        	for(int i=0;i<b.size();i++)numb[i]=b[b.size()-1-i]-'0';
        	for(int i=0;i<a.size();i++)for(int j=0;j<b.size();j++)sum[i+j]+=numa[i]*numb[j];
        	for(int i=0;i<599;i++){
        		sum[i+1]+=sum[i]/10;
        		sum[i]%=10;
        	}
        	bool f=false;
        	for(int i=599;i>=0;i--)if(sum[i]!=0||f){
        		cout<<sum[i];
        		f=true;
        	}
        	if(!f)cout<<"0";
        	return 0;
        }
        
        • 0
          @ 2024-12-18 17:05:12

          题解

          这种题不用讲思路了吧(bushi)
          给个赞呗

          #include<bits/stdc++.h>
          using namespace std;
          void CHENG(string& a,string b){
              string c=a;
              int ans[1001]={};
              for(int i=0;i<b.size();i++)b[i]-='0';
              for(int i=0;i<c.size();i++)c[i]-='0';
              reverse(c.begin(),c.end());
              reverse(b.begin(),b.end());
              for(int i=0;i<int(c.size());i++){
                  for(int j=0;j<int(b.size());j++){
                      ans[i+j]+=c[i]*b[j];
                  }
              }
              for(int i=0;i<1001;i++){
                  if(ans[i]>=10){
                      ans[i+1]+=ans[i]/10;
                      ans[i]%=10;
                  }
              }
              string x="";
              int t=999;
              while(!ans[t])t--;
              t++;
              for(int i=0;i<t;i++){
                  x+=to_string(ans[i]);
              }
              reverse(x.begin(),x.end());
              a=x;
          }
          int main(){
              string a,b;
              cin>>a>>b;
              CHENG(a,b);
              cout<<a;
          }
          
          • 1

          Information

          ID
          660
          Time
          1000ms
          Memory
          256MiB
          Difficulty
          5
          Tags
          # Submissions
          91
          Accepted
          35
          Uploaded By