• 大数加法


    给出2个大整数A,B,计算A+B的结果。

    Input

    第1行:大数A
    第2行:大数B
    (A,B的长度 <= 10000 A B为正数)

    Output

    输出A + B

    Input示例

    68932147586
    468711654886

    Output示例

    537643802472
    #include<cstdio>
    #include <cstring>
    #include<iostream>
    #include<cmath>
    #include <stack>
    using namespace std;
    typedef long long LL;
    int main()
    {
    
        stack <int> a,b,c;
        char m[100000],n[100000];
        gets(m);
    
        gets(n);
        int la=strlen(m),lb=strlen(n);
        //printf("%d %d
    ",la,lb);
        int i,j,k;
        for(i=0;i<la;i++)
        {
            char t=m[i]-48;
            a.push(t);
            //printf("%d ",t);
        }
        for(i=0;i<lb;i++)
        {
            char t=n[i]-48;
            b.push(t);
             //printf("%d ",t);
        }
        int e=0;
        for(;;)
        {
            int t,u,g=0;
            if(!a.empty())
            {
                t=a.top();
                a.pop();
            }
    
            else
             t=0;
            if(!b.empty())
            {
                 u=b.top();
                 b.pop();
            }
            else
             u=0;
            g=t+u+e;
            if(g>=10)
            {
                g=g%10;
                e=1;
            }
            else
                e=0;
            c.push(g);
            if((a.empty())&&(b.empty()))
                break;
        }
        while(!c.empty())
        {
            int t;
            t=c.top();
            c.pop();
            printf("%d",t);
        }
        return 0;
    }
    
    
    

    给出2个大整数A,B,计算A+B的结果。

    Input

    第1行:大数A
    第2行:大数B
    (A,B的长度 <= 10000 需注意:A B有可能为负数)

    Output

    输出A + B

    Input示例

    68932147586
    468711654886

    Output示例

    537643802472

    这个代码是在网上找的。。。

    http://www.51nod.com/question/index.html#!questionId=770

    
    
    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <string.h>
    #include <stdio.h>
    #include <string>
    #include <cstdlib>
    #define rep(i,o,u) for(int i = o;i < u; i++)
    typedef long long ll;
    using namespace std;
    char a[10010], b[10010];
    char c[10010];
    int main(){
    	memset(a, 0, sizeof(a));
    	memset(b, 0, sizeof(c));
    	memset(c, 0, sizeof(c));
    	cin >> a >> b;
    	if (a[0] != '-'&&b[0] != '-'){
    		int len1 = strlen(a);
    		int len2 = strlen(b);
    		if (len1 < len2) swap(a, b), swap(len1, len2);
    		reverse(a,a+len1);
    		reverse(b,b+len2);
    		rep(i, 0, len2){
    			c[i] = c[i] + a[i] + b[i] - '0';
    			if (c[i] > '9') c[i + 1]++, c[i] -= 10;
    		}
    		rep(i, len2, len1){
    			c[i] = c[i] + a[i];
    			if (c[i] > '9') c[i + 1]++, c[i] -= 10;
    		}
    		if (c[len1] != 0) c[len1] += '0', cout << c[len1];
    		for (int i = len1-1; i >= 0; i--){
    			cout << c[i];
    		}
    		cout << endl;
    	}else if (a[0] == '-'&&b[0] == '-'){
    		int len1 = strlen(a);
    		int len2 = strlen(b);
    		if (len1 < len2) swap(a, b), swap(len1, len2);
    		reverse(a + 1, a + len1);
    		reverse(b + 1, b + len2);
    		rep(i, 1, len2){
    			c[i] = c[i] + a[i] + b[i] - '0';
    			if (c[i] > '9') c[i + 1]++, c[i] -= 10;
    		}
    		rep(i, len2, len1){
    			c[i] = c[i] + a[i];
    			if (c[i] > '9') c[i + 1]++, c[i] -= 10;
    		}
    		cout << "-";
    		if (c[len1] != 0) c[len1] += '0', cout << c[len1];
    		for (int i = len1 - 1; i > 0; i--){
    			cout << c[i];
    		}
    		cout << endl;
    	}
    	else{
    		if (a[0] == '-') swap(a, b);
    		int len1 = strlen(a); int len2 = strlen(b);
    		if (len1 > len2 - 1){
    			reverse(a, a + len1); reverse(b + 1, b + len2);
    			rep(i, 0, len2-1){
    				c[i] = c[i] + a[i] - b[i + 1] + '0';
    				if (c[i] < '0') c[i] += 10, c[i + 1]--;
    			}
    			rep(i, len2-1, len1){
    				c[i] = c[i] + a[i];
    				if (c[i] < '0') c[i] += 10, c[i + 1]--;
    			}
    			int flag = 0;
    			for (int i = len1 - 1; i >= 0; i--){
    				if (c[i] != '0') flag = 1;
    				if (flag) cout << c[i];
    			}
    			cout << endl;
    		}else if (len1 < len2 - 1){
    			reverse(a, a + len1); reverse(b + 1, b + len2);
    			rep(i, 0, len1){
    				c[i] = c[i] + b[i + 1]- a[i] + '0';
    				if (c[i] < '0') c[i] += 10, c[i + 1]--;
    			}
    			rep(i, len1, len2-1){
    				c[i] = c[i] + b[i+1];
    				if (c[i] < '0') { c[i] += 10;c[i + 1]--; }
    			}
    			int flag = 0;
    			cout << '-';
    			for (int i = len2 - 2; i >= 0; i--){
    				if (c[i] != '0') flag = 1;
    				if (flag) cout << c[i];
    			}
    			cout << endl;
    		}else{
    			int flag = strcmp(a, b + 1);
    			if (flag == 0)
    				cout << 0 << endl;
    			else if (flag > 0){
    				reverse(a, a + len1); reverse(b + 1, b + len2);
    				rep(i, 0, len2 - 1){
    					c[i] = c[i] + a[i] - b[i + 1] + '0';
    					if (c[i] < '0') c[i] += 10, c[i + 1]--;
    				}
    				rep(i, len2 - 1, len1){
    					c[i] = c[i] + a[i];
    					if (c[i] < '0') c[i] += 10, c[i + 1]--;
    				}
    				int flag = 0;
    				for (int i = len1 - 1; i >= 0; i--){
    					if (c[i] != '0') flag = 1;
    					if (flag) cout << c[i];
    				}
    				cout << endl;
    			}else{
    				reverse(a, a + len1); reverse(b + 1, b + len2);
    				rep(i, 0, len1){
    					c[i] = c[i] + b[i + 1] - a[i] + '0';
    					if (c[i] < '0') c[i] += 10, c[i + 1]--;
    				}
    				rep(i, len1, len2 - 1){
    					c[i] = c[i] + b[i + 1];
    					if (c[i] < '0') { c[i] += 10; c[i + 1]--; }
    				}
    				int flag = 0;
    				cout << '-';
    				for (int i = len2 - 2; i >= 0; i--){
    					if (c[i] != '0') flag = 1;
    					if (flag) cout << c[i];
    				}
    				cout << endl;
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    find
    fdisk
    falcon-eye
    ethtools
    e2fsck
    dpkg
    declare
    df
    debconf-utils
    区块链从零开始做开发(0):hyperledger Fabric2.3安装
  • 原文地址:https://www.cnblogs.com/jk17211764/p/9677396.html
Copyright © 2020-2023  润新知