面试—每日一题(10)

      作为面试中的元老级别的问题,大数操作是很多公司都会出的问题;现在为了记录自己在对大数操作中学习的一些结果,博文中将陆续讲解大数的一些操作,包括大数加、减、乘和除等;在最后,封装一个完整的大数操作类供以后的使用。

       而今天这篇博文将主要讲解大数的加法操作;思路如下:

(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';
}

最后希望大家提出中肯的建议!


你可能感兴趣的:(面试,Class)