题目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
****************************************************************/

时间: 2024-10-13 00:54:25

题目1198:a+b(大数相加)的相关文章

java-两个大数相加

题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a="8888899999999888";  String b="88888888888888";  String str=new BigInteger(a).add(new BigInteger(b)).toString();  System.out.println(str);

HDU 1047 Integer Inquiry 大数相加 string解法

本题就是大数相加,题目都不用看了. 不过注意的就是HDU的肯爹输出,好几次presentation error了. 还有个特殊情况,就是会有空数据的输入case. #include <stdio.h> #include <vector> #include <string.h> #include <algorithm> #include <iostream> #include <string> #include <limits.h

HDU 1250 Hat&#39;s Fibonacci(Java大数相加)+讲解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n -

POJ 1503 Integer Inquiry(大数相加,java)

题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main { /** * @param args */ public static void main(String[] args) throws Exception { // 定义并打开输入文件 Scanner cin = new Scanner(System.in); BigInteger a, sum

杭电ACM1297——Children’s Queue~~大数相加的应用

题目的意思很明确,不能单独有一个女生站一起. 假设有N个人. 1.最后一个人是男生,则有F(N - 1). 2.最后一个人是女生,则第N - 1也是女生,则有F(N - 1). 但还有一种就是,第N - 2个是女生,(是男生的话,包含在F(N - 1)中),但是第N - 3 个是男生,则不包含在上面的情况中,但是也是符合的.也就是最后三个是女生,倒数第四个是男生.也就是还有F(N - 4)种. 所以有递推公式:F(N) = F(N - 1) + F(N - 2) + F(N - 4). 下面的是

【模板小程序】大数相加(十进制),包含合法性检查

1 //大数相加(十进制),用string处理 2 #include <iostream> 3 #include <string> 4 #include <algorithm> 5 6 using namespace std; 7 8 //输入数据合法性检查,数字必须在0-9范围内 9 bool IsVaild(const string& num1,const string& num2) 10 { 11 for(auto val:num1) 12 { 1

ACM 大数相加

大数问题 基本都可以归结到大数相加上来 做大数问题  要返璞归真 回到小学里做加法 把数字读入到字符串数组中  每个位数一 一相加  主要考虑进位问题 如果整数的话 左边用零补齐 小数的话要左右分开补齐零  小数的零要补右边 HDOJ题目在1002 1753 下面给代码  整数相加 #include <stdio.h> #include <string.h> #define SIZE 1000 void convert(char a[],char newa[]) { memset(

ACM——大数相加

大数加法 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:2085            测试通过:543 描述 求两个非负整数(1000位以内)的和. 输入 两个非负整数(1000位以内),以空格分隔. 输出 两个非负整数的和. 样例输入 111111111111 222222222222 样例输出 333333333333 提示 题目来源 GUOJ #include<iostream> #include<strin

poj 1503 Integer Inquiry(多个大数相加)

题目链接:http://poj.org/problem?id=1503 Description One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers. ``This supercomput

大数相加(类似杭电acm1002)

/*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不知道为什么提交以后一直wa,(如果有人测试了我代码以后知道我wa的原因请评论中提出哦,十分感谢),但是算法思想应该是对的,也参考了其他人的博客,(http://blog.csdn.net/hackbuteer1/article/details/6667026的大数相加的题目) 我的代码如下: //大