3 条题解

  • 1
    @ 2025-1-13 15:21:38

    一道小模拟

    #include <bits/stdc++.h>
    using namespace std;
    string a,b;
    int x[100000],y[100000];
    int z[100000];
    int main(){
    	cin>>a>>b;
    	int len=max(a.size(),b.size());
    	//逆置转整 
    	for(int i=a.size()-1,j=0;i>=0;i--,j++){
    		x[j]=a[i]-'0';
    	}
    	for(int i=b.size()-1,j=0;i>=0;i--,j++){
    		y[j]=b[i]-'0';
    	}
    	//加
    	for(int i=0;i<len;i++){
    		z[i]+=x[i]+y[i];
    		if(z[i]>=10){
    			z[i]-=10;
    			z[i+1]+=1;
    		}
    	}
    	//输出
    	int f=0;//无效输出 
    	for(int i=len;i>=0;i--){
    		if(z[i]!=0){
    			f=1;
    		}
    		if(f==1){
    			cout<<z[i];
    		}
    	}
    	return 0; 
    }
    
    • @ 2025-1-13 15:23:06

      我的数组有点小,要开大,复制只能得80

  • 0
    @ 2025-3-1 21:17:11
    #include <iostream>
    #include <vector>
    using namespace std;
    
    const int N = 1e6+10;
    
    vector<int> add(vector<int> & A,vector<int> &B)
    {
      vector<int> c;
      int t = 0;
      for(int i = 0;i<A.size()||i<B.size();i++)
      {
        if(i<A.size())
        t+=A[i];
        if(i<B.size())
        t+=B[i];
        c.push_back(t%10);
        t /= 10;
      }
      if(t) c.push_back(1);
      return c;
    }
    
    int main(){
      string a,b;
      vector<int> A,B;
      cin>>a>>b;
      for(int i = a.size()-1;i>=0;i--)
      A.push_back(a[i]-'0');
      for(int i = b.size()-1;i>=0;i--)
      B.push_back(b[i]-'0');
      vector<int> c = add(A,B);
      for(int i = c.size()-1;i>=0;i--)
      printf("%d",c[i]);
      return 0;
    }
    
    • 0
      @ 2024-11-23 19:26:03

      这道题真的很难

      首先,我们要知道这道题的步骤

      但,在完成这些步骤前,我们要先完成这些。

      const int maxn = 500+5;
      int a[maxn];//加数
      int b[maxn];//加数
      int c[maxn];//进位
      int ans[maxn];//结果
      string s;//不搞这个没法一次性输入加数
      

      步骤一共有四步

      一,把s中的值移入a

      依然有个前提,就是要先定义这个 int la = s.length();//加数的长度 代码如下

      cin >> s;//输入加数
      int la = s.length();
      for(int i=1;i<=la;i++){
          a[i] = s[la-i]-'0';//把s中的值倒着加入
      }
      

      至于为什么要减去字符0可以看这个 第二步同上 再这样加

      int len = max(la,lb);
      for(int i=1;i<=len;i++){
          ans[i] = (a[i] + b[i] + c[i])%10;
          c[i+1] = (a[i] + b[i] + c[i])/10;
      }
      

      最后这样输出

      if(c[len+1] != 0){//特判
      	cout << c[len+1];
      }
      for(int i=len;i>=1;i--){
      	cout << ans[i];
      }
      
    • 1

    信息

    ID
    5659
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    137
    已通过
    72
    上传者