当前位置:首页 > 编程学习 > C++大整数加减法

C++大整数加减法

编程学习2020-07-1060110

简单实现了加减法,以后有时间了完善乘除法。

/*
*
*   大整数加减法
*
*/

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

#define N 200

//反转字符串
string res(string s)
{
    int i = 0;
    int j = s.length() - 1;

    while (i < j)
    {
        swap(s[i], s[j]);
        i++;
        j--;
    }

    return s;
}

//转换字符串为int数组
int pub(string s1, string s2, int a[], int b[])
{
    s1 = res(s1);
    s2 = res(s2);

    int len1 = s1.length();
    int len2 = s2.length();
    int i, maxlen;
    maxlen = (len1 > len2) ? len1 : len2;

    for (i = 0; i < len1; i++)
    {
        a[i] = s1[i] - '0';
    }

    for (i = 0; i < len2; i++)
    {
        b[i] = s2[i] - '0';
    }

    return maxlen;
}

//加法运算
void add(string s1, string s2)
{
    int a[N] = {0}, b[N] = {0}, c[N] = {0};
    int i, maxlen;
    maxlen = pub(s1, s2, a, b);

    for (i = 0; i < maxlen; i++)
    {
        c[i] = a[i] + b[i];
    }

    for (i = 0; i < maxlen; i++)
    {
        if (c[i] >= 10)
        {
            c[i] = c[i] - 10;
            c[i + 1]++;

            if (maxlen - 1 == i)
            {
                maxlen++;
            }
        }
    }

    for (i = maxlen - 1; i >= 0; i--)
    {
        cout << c[i];
    }

    cout << endl;
}

//减法运算
void sub(string s1, string s2)
{
    int a[N] = {0}, b[N] = {0}, c[N] = {0};
    int i, maxlen, resultlen = -1;
    bool aSmall = false;

    //两数相等直接输出0
    if (s1.compare(s2) == 0)
    {
        cout << 0 << endl;
        return;
    }

    int len1 = s1.length();
    int len2 = s2.length();

    if (len1 == len2)
    {
        aSmall = s1 < s2;
    }
    else
    {
        aSmall = len1 < len2;
    }

    maxlen = pub(s1, s2, a, b);

    if (aSmall)
    {
        cout << '-';

        for (i = 0; i < maxlen; i++)
        {
            c[i] = b[i] - a[i];
        }
    }
    else
    {
        for (i = 0; i < maxlen; i++)
        {
            c[i] = a[i] - b[i];
        }
    }

    for (i = 0; i < maxlen; i++)
    {
        if (c[i] < 0)
        {
            c[i] = c[i] + 10;
            c[i + 1]--;

            if (maxlen - 1 == i)
            {
                maxlen++;
            }
        }
    }
    /////////////////////////
    //去掉结果前的0
    for (i = maxlen; i > 0; i--)
    {
        if (c[i] != 0)
            break;
        else if (c[i] == 0)
        {
            resultlen = i - 1;
        }
    }

    if (resultlen > 0)
    {
        maxlen = resultlen;
    }
    else
    {
        maxlen = 0;
    }

    ////////////////////////

    for (i = maxlen; i >= 0; i--)
    {
        cout << c[i];
    }

    cout << endl;
}

int main()
{
    string s1, s2;
    char ch;
    do
    {
        cout << "输入2个正整数:\n";
        cin >> s1 >> s2;
        if (!isdigit(s1[0]) || !isdigit(s2[0]))
            break;
        cout << "\n输入操作符(+或者-):";
        cin >> ch;

        switch (ch)
        {
        case '+':
            add(s1, s2);
            break;

        case '-':
            sub(s1, s2);
            break;
        }
        cout << endl;
    } while (true);

    system("pause");
    return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由海阔天空发布,如需转载请注明出处。

本文链接:https://apull.net/html/20200710184538.html

标签: 编程技术C++
分享给朋友:

相关文章

为什么每个程序员都应该学习C语言

为什么每个程序员都应该学习C语言

为什么每个程序员都应该学习C语言 每个程序员在他们的编程生涯中都应该学习C语言,因为它有太多难以忽视的好处了。除了它会给你提供更多的工作机会之外,C语言还会教给你更多的关于计算机的知识。它能给我们提供的裨益,简单列举如下:   1)相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机。   2)设备驱动程序和操作系统只能用C语言来编写。现在,你...

代码迷惑技术如何保护Java免遭逆向工程

代码迷惑技术如何保护Java免遭逆向工程

很少有问题比程序员遇到不访问无法利用的源代码就无法解决的漏洞更令人沮丧的了。你是否在通过一个在线开源库修补代码,或正在调用常用操作系统例行程序;你可能每周都要花时间处理不是由你编写,因而也无法访问其源代码的代码。因为Java字节码包含许多和原始代码相同的信息,所以很容易对Java类文件执行逆向工程。另外,Java程度以其“一旦编写,随处运行”特性而闻名。虽然并非Java语言的专利,但代码反编译从未在Java开发者之中得到如此公开或普遍地利用。反编译的对...

致面向对象技术初学者的一封公开信

致面向对象技术初学者的一封公开信

 致面向对象技术初学者的一封公开信 Alistair Cockburn 著(1996 年2 月),袁峰 译介绍 首先我要解释一下为什么会写这封公开信。这似乎已经成了一种习惯,但这个步骤还是需要的。过去6 年中, 我曾经无数次地在饭店、酒吧、旅店大厅等各种地方以同一种方式度过愉快而漫长的夜晚:和同样追求真理、光明和智慧的伙伴一起探讨面向对象的真谛。现在,我已经可以回答很多当年我遇到的问题。这些同样的问题也在困扰着我的一位新同事,在一家饭店里,我花了整整一个晚上和他讨...

在ASP中访问和更新Cookies集合

在ASP中访问和更新Cookies集合

  Cookies的值比ASP其他集合(例如Form和ServerVariables)的值要复杂得多。Cookie是一小块由浏览器存贮在客户端系统上的文本,且随同每次请求发往它们应用于的域中的服务器。  ASP使得应用cookie较为容易,可以从Request对象的Cookies集合中获得所有随同请求发出的cookie值,并可创建或修改cookie,通过Response对象的Cookies集合发回给用户。  Cookie包含可用两种方式构造的信息,单值cookie提供其值给代...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。