2 条题解

  • 0
    @ 2025-3-22 14:58:05

    #include<bits/stdc++.h>//导入输出工具库 using namespace std;//规定一个范围空间 叫std

    string mull(string s1 , string s2){ //1 - 翻转

    reverse(s1.begin() , s1.end()); 
    reverse(s2.begin() , s2.end()); 
    
    //2 - 把所有的字符 变成 数字 放到对应的数组中
    
    int a[1000] = {0}, b[1000] = {0}, c[1000] = {0};
    for(int i = 0;i < s1.size();i++)	a[i] = s1[i] - '0';
    for(int i = 0;i < s2.size();i++)	b[i] = s2[i] - '0';
    
    //3 - 两两数进行相乘 循环嵌套完成
    for(int i = 0;i < s1.size();i++){
    	for(int j = 0;j < s2.size();j++){
    		c[i + j] += a[i] * b[i];
    	}
    }
    
    //4 - 处理进位问题 c的位置如果是 大于 10 表示当前位置需要进位
    int len = s1.size() + s2.size(); // 任意位数相乘 答案最大的位数
    for(int i = 0;i < len;i++){
    	if(c[i] >= 10){//当前的位数需要进位 
    		c[i + 1] += c[i] / 10;//把当前进位 给到下一位
    		c[i] = c[i] % 10;//取当前的个位 就是答案 
    	}
    } 
    
    //5 - 处理前导零问题
    while(len > 1 && c[len - 1] == 0){
    	len--;
    } 
    string ans;
    //6 - 把 数组 变成 字符串
    for(int i = 0;i < len;i++){
    	ans = char(c[i] + '0') + ans;
    } 
    return ans;
    

    } int main()//主程序的入口 { string s1 , s2; cin >> s1 >> s2; cout << mull(s1 , s2); return 0; }

    • 0
      @ 2023-8-5 15:39:55

      #include<bits/stdc++.h> using namespace std; string a1,b1; int a[505],b[505],c[100005]; int lena,lenb,lenc; int main() { cin>>a1>>b1; lena=a1.size(); lenb=b1.size(); for(int i=1;i<=lena;i++) a[i]=a1[lena-i]-'0'; for(int i=1;i<=lenb;i++) b[i]=b1[lenb-i]-'0'; int x=0; for(int i=1;i<=lena;i++) { x=0; for(int j=1;j<=lenb;j++) { c[i+j-1]+=a[i]*b[j]+x; x=c[i+j-1]/10; c[i+j-1]%=10; } c[i+lenb]=x; }

      lenc=lena+lenb;					
      while(c[lenc]==0&&lenc>1)
      	lenc--; 
      for(int i=lenc;i>=1;i--) 
      {
      	cout<<c[i]; 
      }	
      return 0;
      

      }

      • 1

      信息

      ID
      1678
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      226
      已通过
      51
      上传者