高精度加法 C++版本

AcWing 791 高精度加法   https://www.acwing.com/problem/content/description/793/

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>

using namespace std;

const int N = 1e5 + 5;

int a[N];
int b[N];

//结果在a数组中
void add(int a[], int b[])
{
    int tmp = 0;
    int len = max(a[0], b[0]);
    int i;
    for(i = 1; i <= len; ++ i)
    {
        int res = a[i] + b[i] + tmp;
        tmp = res / 10;
        a[i] = res % 10;
    }
    if(tmp > 0)
    {
        a[i] = tmp;
        ++ a[0];
    }
}

int main()
{
    string A, B;
    cin >> A >> B;
    a[0] = A.length();
    b[0] = B.length();
    for(int i = 1; i <= a[0]; ++ i)
        a[i] = A[a[0] - i] - ‘0‘;
    for(int i = 1; i <= b[0]; ++ i)
        b[i] = B[b[0] - i] - ‘0‘;
    add(a, b);
    for(int i = a[0]; i > 0; -- i)
        printf("%d", a[i]);
    return 0;
}

原文地址:https://www.cnblogs.com/Chaosliang/p/12188684.html

时间: 2024-11-02 04:03:52

高精度加法 C++版本的相关文章

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

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

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

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

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

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

A1087. 高精度加法

体验一下,高精度的算法 /* * ===================================================================================== * * Filename: a1087.c * * Description: Rainboy_RT * * Version: 1.0 * Created: 2014-07-04 14:54:08 * Revision: none * Compiler: gcc * * Author: Rain

用c++实现高精度加法

c++实习高精度加法 最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以字符数组的形式输入,建立字符数组,建立相应的整数数组,然后一一映射,以此来实现数据的输入,需要注意的是,当实现字符向数字映射时,应该减去相应的ASCII偏移值,即48. 2:为了模拟我们在纸上手算的进位模拟运算,我们将字符数组反向填入整数数组,上图的后几行代码实现了这个操作. 3:实现进位加法,这是

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 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