7 solutions

  • 2
    @ 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-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形数组中然后进行一位一位的相加

            • 0
              @ 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

              Information

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