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
    ****************************************************************/
  • 相关阅读:
    Java实现web页面内容抓取
    Java写入文件的几种方法及性能对比
    Java实现导出excel
    win10系统安装VMware虚拟机软件以及linux系统
    oracle11g安装教程
    oracle怎么建立本地连接
    工厂模式
    计算一个字符串中每个字符出现的次数
    MySql多表查询
    如何查看MySql的sql语句性能
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4143942.html
Copyright © 2011-2022 走看看