作为面试中的元老级别的问题,大数操作是很多公司都会出的问题;现在为了记录自己在对大数操作中学习的一些结果,博文中将陆续讲解大数的一些操作,包括大数加、减、乘和除等;在最后,封装一个完整的大数操作类供以后的使用。
而今天这篇博文将主要讲解大数的加法操作;思路如下:
(1)首先从键盘读取用户输入的大数;
(2)将用户输入的大数字符串转换为数字数组;
(3)将得到的数字数组进行加法运算。
数字数组加法运算思路如下:
(1)位对齐;
(2)从低位往高位加,当和大于10时则相加位结果减去10,然后结果为的下一位加1;
(3)打印结果数组。
废话不多说,上具体代码:
#ifndef BIGNUM_H #define BIGNUM_H #define MAX_SIZE 1000 class BigNum { public: BigNum(){memset(numArray, 0, sizeof(numArray));} BigNum(char *num); BigNum operator+ (const BigNum &); void PrintResult(); private: int length; int numArray[MAX_SIZE]; }; #endif
#include <iostream> #include "BigNum.h" using namespace std; BigNum::BigNum(char *num) { memset(numArray, 0, sizeof(numArray)); int len = strlen(num); length = len; for (int i = len - 1; i >= 0; --i) { numArray[i] = (*num) - '0'; num++; } } BigNum BigNum::operator+(const BigNum &num) { int maxLen = length > num.length ? length : num.length; for (int i = 0; i <= maxLen - 1; ++i) { numArray[i] += num.numArray[i]; if (numArray[i] >= 10) { numArray[i] -= 10; numArray[i + 1] += 1; // 当最高位相加大于10时,计算结果的有效位数应加1 if (i == maxLen - 1) { length = maxLen + 1; } } } return (*this); } void BigNum::PrintResult() { for (int i = length - 1; i >= 0; --i) { cout<<numArray[i]; } cout<<'\n'; }