2 条题解

  • 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
    @ 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
标签
递交数
125
已通过
67
上传者