大数运算操作

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

void mulpl(string ch1, string ch2) {
    int len1 = ch1.size();
    int len2 = ch2.size();
    char ch3[1000009];
    for (int i = 0; i < 1000009; ++i)
        ch3[i] = '\0';
    for (int i = 0; i < len1; ++i) {
        for (int j = 0; j < len2; ++j) {
            ch3[i+j] += (ch1[i] - '0') * (ch2[j]-'0');// 直接实现了移位相加
            if (ch3[i + j] > 9 && (i + j) > 0) {
                ch3[i + j - 1] += ch3[i + j] / 10;
                ch3[i + j] %= 10;
            }
        }
    }
    for (int i = len1 + len2 - 1; i > 0; --i) {
        if (ch3[i] > 9) {
            ch3[i - 1] += ch3[i] / 10;
            ch3[i] %= 10;
        }
    }
    if (ch3[0] > 9) {
        cout << ch3[0] / 10;
        ch3[0] %= 10;
    }
    for (int i = 0; i < len1 + len2 - 1; ++i)
        cout << char(ch3[i] + '0');
    cout << endl;
}

void add(string ch1, string ch2) {
    int len1 = ch1.size();
    int len2 = ch2.size();
    char ch3[1000009];
    for (int i = 0; i < 1000009; ++i)
        ch3[i] = '\0';
    int lenmax = max(len1,len2);
    for (int i = 0; i < lenmax; ++i) {
        char c1, c2;
        c1 = i > len1 ? '0' : ch1[i];
        c2 = i > len2 ? '0' : ch2[i];
        ch3[i] = c1-'0' + c2-'0';
    }
    for (int i = lenmax; i > 0; --i) {
        if (ch3[i] > 9) {
            ch3[i - 1] += ch3[i] / 10;
            ch3[i] %= 10;
        }
    }
    if (ch3[0] > 9) {
        cout << ch3[0] / 10;
        ch3[0] %= 10;
    }
    for (int i = 0; i < lenmax; ++i)
        cout << char(ch3[i] + '0');
    cout << endl;
}
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    mulpl(s1,s2);
    add(s1,s2);


    return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 大数是啥?来一段百度百科的话由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算...
    海娩阅读 5,574评论 0 2
  • 大数加法 写的有些复杂----,不过是对的 简易版本 大数减法 有bug啊啊啊啊,只能两个正整数相减,且被减数小于...
    _弓长_大人阅读 5,368评论 0 0
  • 题目描述: 应用中需要解决大数运算问题。请设计有符号大数类,能支持大数+、-运算和输出。假定本题大数在200位以内...
    板混DK阅读 4,831评论 0 0
  • 加法操作算法按位对齐低位开始逐位相加进位调整 减法操作算法按位对齐低位开始逐位相减借位调整 乘法操作算法乘数与被乘...
    jdzhangxin阅读 4,574评论 4 1
  • 2017.09.17 20:15 打开App 从上周开始,妈妈就问我说,你要不要去学画画的,我想了想说:“好啊!...
    赵晓晴阅读 3,471评论 3 2