大整数的加减法(C++)

题目引用:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1709

1709: 大整数的加减法

时间限制: 1 Sec 内存限制: 64 M

题目描述

在高精度运算的场合下,通常需要对超级巨大的整数进行运算。现在请你编程帮忙实现大整数的加法和减法运算。

输入

包含只有加减法的运算表达式。参与运算的整数及其中间结果的取值范围是(-10^10000000 , 10^10000000)。表达式的形式都是合乎逻辑的并且表达式中没有空格。如果第一个操作数为正数或0则没有符号,如果为负数则有负号。

输出

输出表达式的值。

样例输入

-11111111111111111111111+99999999999999999999999+22222222222222222222222

样例输出

111111111111111111111110

解析:这需要读取单个字符并存入数组里面进行运算

代码:

#include<iostream> 
#include<string> 
using namespace std; 
int main() 
{ 
    int b[11000000] = {}; 
    string str; 
    cin >> str; 
    int num = str.size(); 
    int k = num - 1; 
    int count = 0; 
    int digit = 0; 
    int temp; 
    for (int i = num - 1; i >= 0; i--) 
    { 
        count = 0; 
        if (i != 0) 
        { 
            if (str[i] != '+'&&str[i] != '-') 
                continue; 
            if (str[i] == '+') 
            { 
                for (int j = k; j > i; j--) 
                    b[count++] += (str[j] - '0'); 
                k = i - 1; 
            } 
            else
            { 
                for (int j = k; j > i; j--) 
                    b[count++] -= (str[j] - '0'); 
                k = i - 1; 
            } 
        } 
        else
        { 
            if(str[i]=='-') 
                for (int j = k; j > i; j--) 
                    b[count++] -= (str[j] - '0'); 
            else
                for (int j = k; j >= i; j--) 
                    b[count++] += (str[j] - '0'); 
        } 
        if (count > digit) 
            digit = count; 
    } 
    for (int i = 0; i < digit; i++) 
    { 
        if (b[i] >= 0) 
        { 
            temp = b[i] / 10; 
            b[i] -= (temp * 10); 
            b[i + 1] += temp; 
        } 
        if (b[i] < 0) 
        { 
            if (b[i] % 10 != 0) 
                temp = (-1)*b[i] / 10 + 1; 
            else
                temp = (-1)*b[i] / 10; 
            b[i] += (temp * 10); 
            b[i + 1] -= temp; 
        } 
    } 
    for (int i = digit; i >= 0; i--) 
    { 
        if (i == 0) 
        { 
            cout << b[i]; 
            break; 
        } 
        if (b[i] == 0) 
            continue; 
        else
        { 
            if (b[i] > 0) 
            { 
                for (int j = i; j >= 0; j--) 
                    cout << b[j]; 
            } 
            else
            { 
                if (b[i] + 1 != 0) 
                { 
                    cout << b[i] + 1; 
                    for (int j = i - 1; j >= 1; j--) 
                        cout << 9 - b[j]; 
                    cout << 10 - b[0]; 
                } 
                else
                { 
                    cout << "-"; 
                    for (int j = i - 1; j >= 1; j--) 
                        cout << 9 - b[j]; 
                    cout << 10 - b[0]; 
                } 
            } 
            break; 
        } 
    } 
} 
/************************************************************** 
    Problem: 1709 
    User: 201730685257 
    Language: C++ 
    Result: 正确 
    Time:40 ms 
    Memory:44324 kb 
****************************************************************/

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值