算法---超长整数四则运算

我们的整数,对于计算机存储都是有位数限制的,那么,我们如何对c好长的zhen整数进行运算呢?

这里,我们使用一位数组,来进行存储zh整数,那么四则运算,就需要我们进行ding定义:

定义如下:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;
//一位数组长度;
#define N 5
//一个位置,存放的长度
#define M 4
//加法;从右到左,记得进位
void add(int *a, int *b, int *c) {
	int i, carry = 0;
	for (i = N - 1; i >= 0; i--) {
		c[i] = a[i] + b[i] + carry;
		if (c[i] < 10000)
			carry = 0;
		else {
			c[i] = c[i] - 10000;
			carry = 1;
		}
	}
 }
//减法;从右到左,记得进位
void sub(int *a, int *b, int *c) {
	int i, borrow = 0;
	for (i = N - 1; i >= 0; i--) {
		c[i] = a[i] - b[i] - borrow;
		if (c[i] >= 0) {
			borrow = 0;
		}
		else {
			c[i] += 10000;
			borrow = 1;
		}
	}
}
//乘法;从右到左,记得进位,但是呢,这里是一个数组长数,乘以一个整形数;
void mul(int *a, int b, int *c) {
	int i, tem, carry = 0;
	for (i = N - 1; i >= 0; i--) {
		tem = a[i] * b + carry;
		c[i] = tem % 10000;
		carry = tem / 10000;
	}
}
//除法,由左到右,进位,这也是一个数组长数,除以一个整形数;
void div(int *a, int b, int *c) {
	int i, tem, remain = 0;
	for (i = 0; i < N; i++) {
		tem = a[i] + remain;
		c[i] = tem / b;
		remain = (tem%b) * 10000;
	}
}
int main() {
	int a[N] = { 1000,1000,1000,0000,0000 };
	int b[N] = { 1000,1000,1000,0000,0000 };
	int c[N] = { 0};
	mul(a, 3, c);
	int q;
	for (int i = 0; i < N; i++) {
		q = M-1;
		while (q >0) {
			if (c[i] / (pow(10,q)) == 0)
				cout << 0;
			q--;
		}
		cout << c[i] ;
	}
	cout << endl;
	div(a, 10, c);
	for (int i = 0; i < N; i++) {
		q = M - 1;
		while (q >=0) {
			if (c[i] / (pow(10, q)) == 0)
				cout << 0;
			q--;
		}
		cout << c[i];
	}
	system("pause");
	return 0;
}

-----成为顶级云计算架构师的人

猜你喜欢

转载自blog.csdn.net/W1427259949/article/details/81144292
今日推荐