7 solutions

  • 3
    @ 2022-11-19 22:52:07

    python写法

    num = input().split(' ')
    print(int(num[0]) + int(num[1]))
    
    • 2
      @ 2022-4-19 12:56:18
      #include <iostream>
      using namespace std;
      string a, b;
      int main() {
      	cin >> a >> b;
      	int l1 = a.length(), l2 = b.length(), l = abs(l1 - l2);
      	if (l1 > l2)
      		while (l--)
      			b = "0" + b;
      	if (l1 < l2)
      		while (l--)
      			a = "0" + a;
      	int temp = 0;
      	l = max(l1, l2);
      	while (l--) {
      		int x = (a[l] - '0') + (b[l] - '0') + temp;
      		if (x >= 10)temp = 1, x -= 10;
      		else temp = 0;
      		a[l] = x + '0';
      	}
      	if (temp) a = "1" + a;
      	cout << a << endl;
      	return 0;
      }
      
      • 1
        @ 2023-8-16 10:24:12

        个人觉得此解法较为易懂。

        #include<bits/stdc++.h>
        using namespace std;
        
        string add_string(string s1, string s2){
        	vector<int> A,B,C;
        	for(int i=s1.size()-1;i>=0;i--){
        		A.push_back(s1[i]);
        	}
        	for(int i=s2.size()-1;i>=0;i--){
        		B.push_back(s2[i]);
        	}
        	if(A.size()<B.size()) return add_string(s2,s1);
        	
        	int t=0; //本位和,包含上一次的进位
        	for(int i=0;i<A.size();i++){
        		t += A[i]-'0';
        		if(i<B.size()) t += B[i]-'0';
        		C.push_back(t%10); //本位放进来
        		t /= 10; //这个时候t就变成了进位
        	}
        	if(t) C.push_back(t); //如果最后还有进位,要放进来
        	string ans;
        	for(int i=C.size()-1;i>=0;i--){
        		ans += to_string(C[i]);
        	}
        	return ans;
        }
        
        int main(){
        	string a,b;
        	cin>>a>>b;
        	
        	cout<<add_string(a,b);
        	
        	return 0;
        }
        
        • 1
          @ 2022-8-6 22:21:05

          这是一道高精度问题,涉及高位加减法的时候,简单的相加数据会爆掉,所以我们用数组去模拟一位一位的加减法!

          #include <bits/stdc++.h>
          
          //高精度
          
          using namespace std;
          
          const int maxn = 505;
          int a[maxn], b[maxn], c[maxn];
          
          int main(void) {
              string aa, bb;
              cin >> aa >> bb;
          
              if (aa.size() < bb.size()) {
                  swap(aa, bb);
              }
              int k = aa.size() - bb.size();
          
              for (int i = 0; i < aa.size(); i++) {
                  if (i < k) {
                      a[i] = aa[i] - '0';
                      b[i] = 0;
                  }
                  else {
                      a[i] = aa[i] - '0';
                      b[i] = bb[i - k] - '0';
                  }
              }
          
              int res = 0;
              for (int i = aa.size() - 1; i >= 0; i--) {
                  c[i] = (a[i] + b[i] + res) % 10;
                  res = (a[i] + b[i] + res) / 10;
              }
          
              if (res) cout << res;
              for (int i = 0; i < aa.size(); i++) {
                  cout << c[i];
              }
          
              return 0;
          }
          
          • 1
            @ 2022-4-1 7:47:15

            兄弟 ~ 其实 对于 c++ 的 string 来说,写一个 字符串的 大整数加法 真的不繁琐。

            string add(string a,string b) {
            	string ret;
            
            	int len = a.size() > b.size() ? a.size() : b.size();
            
            	int jin = 0;// 进位
            
            	while (a.size() != len) {
            		a = "0" + a;
            	}
            	while (b.size() != len) {
            		b = "0" + b;
            	}
            
            	for (int i = len - 1; i >= 0; --i) {
            		char c = a[i] + b[i] - '0' + jin;
            
            		if (c > '9') {
            			jin = 1;
            			c = c - 10;// 因为最多 其实也 超不过 20
            		}
            		else {
            			jin = 0;
            		}
            
            		ret = c + ret;
            	}
            
            	if (jin == 1) {
            		ret = "1" + ret;
            	}
            
            	return ret;
            }
            
            • 1
              @ 2022-3-9 19:42:36

              字符串做大整数加法太繁琐了,应该使用字符串读入,将字符串或字符数组转换成int行再进行运算。

              #include <stdio.h>
              #include <algorithm>
              #include <math.h>
              #include <vector>
              #include <iostream>
              #include <string.h>
              using namespace std;
              char a[505],b[505];
              int s[600];
              int main() {
                  scanf("%s%s",&a,&b);
                  int tmp=strlen(a),tx=strlen(b);
                  int r=max(tmp,tx)+1;
                  reverse(a,a+tmp);
                  reverse(b,b+tx);
                  int k=0;
                  while(r--) {
                      int x=0,y=0;
                      if(a[k]>='0'&&a[k]<='9')
                          x=a[k]-'0';
                      if(b[k]>='0'&&b[k]<='9')
                          y=b[k]-'0';
                      s[k]=s[k]+x+y;
                      if(s[k]>=10) {
                          s[k+1]=s[k]/10;
                          s[k]=s[k]%10;
                      }
                      k++;
                  }
                  int p=0;
                  for(int i=k; i>=0; i--) {
                      if(!p) {
                          if(!s[i]);
                          else {
                              p=1;
                              cout<<s[i];
                          }
              
                      } else
                          cout<<s[i];
                  }
                  return 0;
              }
              
              • 1
                @ 2022-2-7 17:20:24
                #include<stdio.h>
                #include<string.h>
                //因为是大数相加,本题a,b共有500位即使是long long类型也无法存放
                //因为long long类型占8个字节只有64位,所以只能用字符串数组存放
                char str[10100],str1[10100];//存放大数 
                int  a[10100],b[10100];//进行相加
                void add(){
                	 int len;
                	 int str_len = strlen(str);//计算字符串长度 
                	 int str1_len = strlen(str1);//计算字符串长度 
                	 if(str_len > str1_len){//取两者中较大的一个 
                	     len = str_len;	
                	 }
                	 else{
                	 	len = str1_len;
                	 }
                	 //将a和b数组清零
                	 memset(a,0,sizeof(a));
                	 memset(b,0,sizeof(b)); 
                	
                	for(int i = str_len-1; i>=0; --i){ 
                       a[str_len-1-i] = str[i]-'0';	 	
                	}
                	for(int i = str1_len-1; i>=0; --i){
                		b[str1_len-1-i] = str1[i]-'0';
                	}
                    //将整形数据一位一位相加
                	for(int i = 0; i<len; i++){
                		a[i] = a[i] + b[i];
                		a[i+1] += a[i]/10;
                		a[i] = a[i]%10;
                	}    
                    if(a[len] != 0)//如果进位超过了本身长度则一定要len++ 
                    len++;
                    
                    while(a[len-1] == 0 && len>1)
                    len--;//去掉首位为0的情况
                	
                	for(int i=len-1; i>=0; --i){
                		printf("%d",a[i]);
                	}
                	printf("\n"); 
                	
                } 
                int main(){
                	scanf("%s%s",str,str1);
                	add();
                	return 0;
                	
                }
                
                • @ 2022-2-7 17:21:26

                  因为任何数据类型都无法存放下大数,所以用字符数组进行存放并倒序存入int形数组中然后进行一位一位的相加

              • 1

              Information

              ID
              66
              Time
              1000ms
              Memory
              256MiB
              Difficulty
              8
              Tags
              # Submissions
              811
              Accepted
              111
              Uploaded By