简单高精度加法

【高精度】简单高精度加

题目描述

修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A、B的和,其中A和B的位数在5000位以内。

输入

共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在5000以内。

输出

输出一个非负数,即两数之和。

样例输入

1111111111
2222222222

样例输出

3333333333
#include <bits/stdc++.h>
#define N 5000
#define ZEROCHAR -48
int maxleng(int a,int b)
{
    return a>b?a:b;
}
int transnumber(char c)
{
    return c-‘0‘;
}
int main()
{
    char a[N+5],b[N+5];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    scanf("%s %s",a,b);
    int len1=strlen(a);
    int len2=strlen(b);
    int i;
    for(i=0;i<(len1+1)/2;++i)
    {
        if(i==len1-1-i)
            break;
        a[i]=a[i]+a[len1-1-i];
        a[len1-1-i]=a[i]-a[len1-1-i];
        a[i]=a[i]-a[len1-1-i];
    }
    for(i=0;i<(len2+1)/2;++i)
    {
        if(i==len2-1-i)
            break;
        b[i]=b[i]+b[len2-1-i];
        b[len2-1-i]=b[i]-b[len2-1-i];
        b[i]=b[i]-b[len2-1-i];
    }

    int leng=maxleng(len1,len2);
    int c,psum,sum[N+5],an,bn;
    for(i=0,c=0,psum=0;i<=leng;++i)
    {
        an=transnumber(a[i]);
        bn=transnumber(b[i]);
        if(an==ZEROCHAR)
            an=0;
        if(bn==ZEROCHAR)
            bn=0;
        psum=an+bn+c;
        sum[i]=psum%10;
        c=psum/10;
    }
    int sumleng=(sum[leng]>0?leng+1:leng);
    for(i=sumleng-1;i>=0;--i)
    {
        printf("%d",sum[i]);
    }
    printf("\n");
    return 0;
}

原文地址:https://www.cnblogs.com/Diliiiii/p/9164563.html

时间: 2024-07-31 20:12:21

简单高精度加法的相关文章

问题 B: 【高精度】简单高精度加法

问题 B: [高精度]简单高精度加法 时间限制: 1 Sec  内存限制: 64 MB提交: 94  解决: 27[提交][状态][讨论版] 题目描述 修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A.B的和,其中A和B的位数在5000位以内. 输入 共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A.B的位数均在5000以内. 输出 输出一个非负数,即两数之和. 样例输入 1111111111 2222222222

中石油-【高精度】简单高精度加法

问题 B: [高精度]简单高精度加法 时间限制: 1 Sec  内存限制: 64 MB提交: 63  解决: 20[提交][状态][讨论版] 题目描述 修罗王解决了计算机的内存限制问题,终于可以使用电脑进行大型的魔法运算了,他交给邪狼的第一个任务是计算两个非负整数A.B的和,其中A和B的位数在5000位以内. 输入 共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A.B的位数均在5000以内. 输出 输出一个非负数,即两数之和. 样例输入 1111111111 2222222222

POJ 3181 Dollar Dayz(完全背包+简单高精度加法)

POJ 3181 Dollar Dayz(完全背包+简单高精度加法) http://poj.org/problem?id=3181 题意: 给你K种硬币,每种硬币分别是1美元,2美元-K美元且可以无限使用,问你用上面K种硬币构成n美元的话有多少种方法? 分析: 本题是一道明显的完全背包问题, 不过本题还可以换一种方法来看: 整数n由前K个自然数构造, 一共有多少种方法? (虽然本题要用到高精度加法, 但是很简单, 不要被吓到哦) 首先是DP部分: 令dp[i][j]==x 表示由前i种硬币构成j

leetcode 66. Plus One(高精度加法)

Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 题解:简单的高精度加法,要注意[9]这种输入,要多一位. class Solution { public: vector<int> plusOne(v

【1002】高精度加法,此处应有掌声~(*/ω\*)

木有求助别人然后AC..... 打完了上面这一行我都羞愧(*/ω\*)谁叫我是蒟蒻呢 先上我滴最终代码 1 #include<stdio.h>//高精度加法 2 #include<string.h> 3 4 char ar[1001],br[1001]; 5 int a,b; 6 7 void exchange() 8 { 9 char cr[1001];int c; 10 strcpy(cr,ar); 11 strcpy(ar,br); 12 strcpy(br,cr); 13

leetcode 67. Add Binary (高精度加法)

Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". 简单的二进制高精度加法. class Solution { public: string addBinary(string a, string b) { string ans=""; int c=0,i=a.len

[BASIC-29] 高精度加法

基础练习 高精度加法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推.同样可以用一个数组B来存储b. 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0]

0.28+0.34=? 一个简单小数加法引发的思考

0.28+0.34=? 我相信这个简单的加法,谁都会,肯定等于0.62嘛. 这是两个特别简单的加法,那如果我在其整数位置上加上其他的数字,或者多加几个和项,你是否还能快速算过来? 我想这时候,我们又得借助计算器了!而这,有时可能就是电脑!尤其是如果咱们借助简单程序语言来算的时候,嘿嘿,可能就不是那么回事了~ 不信你看,用javascript算的结果: 用python算的结果: 当然了,我尝试着用其他语言来试一下,结果好像并不都是这样. 其中,java只会在类型转换的时候出现奇怪的值:(当然这在我

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char