zoukankan      html  css  js  c++  java
  • 题目1198:a+b(大数相加)

    题目描述:

    实现一个加法器,使其能够输出a+b的值。

    输入:

    输入包括两个数a和b,其中a和b的位数不超过1000位。

    输出:

    可能有多组测试数据,对于每组数据,
    输出a+b的值。

    样例输入:
    2 6
    10000000000000000000 10000000000000000000000000000000
    样例输出:
    8
    10000000000010000000000000000000


    Code:
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
     
    using namespace std;
     
    int ans_a[1010],ans_b[1010];
     
    void init(int buf[],int len){
        for(int i=0;i<len;i++){
            buf[i]=0;
        }
    }
     
    void charToInt(char buf1[],int len1,char buf2[],int len2){
        for(int i=0;i<len1;i++){
            ans_a[i]=buf1[i]-'0';
        }
         for(int j=0;j<len2;j++){
            ans_b[j]=buf2[j]-'0';
        }
    }
     
    int main()
    {
        char a[1010],b[1010];
        int ans[1010];
        while(scanf("%s%s",a,b)!=EOF){
            int len_a=strlen(a);
            int len_b=strlen(b);
            init(ans_a,len_a+10);
            init(ans_b,len_b+10);
            charToInt(a,len_a,b,len_b);
            int c=0,cnt=0;
            int i,j;
            bool flag=false;
            for(i=len_a-1,j=len_b-1;i>=0&&j>=0;i--,j--){
                ans[cnt]=(ans_a[i]+ans_b[j]+c)%10;
                c=(ans_a[i]+ans_b[j]+c)/10;
                ++cnt;
            }
            if(i<0){
                while(j>=0){
                    ans[cnt]=(ans_b[j]+c)%10;
                    c=(ans_b[j]+c)/10;
                    ++cnt;
                    --j;
                }
                if(c!=0){
                    ans[cnt]=c;
                    flag=true;
                }
            }
            if(j<0){
                while(i>=0){
                    ans[cnt]=(ans_a[i]+c)%10;
                    c=(ans_a[i]+c)/10;
                    ++cnt;
                    --i;
                }
                if(c!=0){
                    ans[cnt]=c;
                    flag=true;
                }
            }
            if(flag==true){
                for(int index=cnt;index>=0;index--){
                    cout<<ans[index];
                }
                cout<<endl;
            }
            if(flag==false){
                for(int index=cnt-1;index>=0;index--){
                    cout<<ans[index];
                }
                cout<<endl;
            }
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1198
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:100 ms
        Memory:1528 kb
    ****************************************************************/
  • 相关阅读:
    chrome更新后,恢复本地丢失的书签和历史记录
    redis 集合set 使用 rediscluster 使用交集
    git 删除分支恢复
    SQL语句性能优化
    A调用B,b有事务,a没有
    Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentica 问题处理
    fasnjson 转换
    String.format()的详细用法
    传递json
    基础入门-加密编码算法
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4143942.html
Copyright © 2011-2022 走看看