您的位置:首页 > 其它

大数加,减,乘,取余一起

2016-04-29 11:14 162 查看
#include<iostream>
#include<string>
#define LEN 100
using namespace std;

void add(char a[], char b[]){
/*********************装换*********************/
int num1[LEN];
int num2[LEN];
for (int i = 0; i < LEN; i++){
num1[i] = 0;
num2[i] = 0;
}
int lena = strlen(a);
int lenb = strlen(b);

for (int i = lena - 1, j = 0; i >= 0; i--){
num1[j++] = a[i] - '0';
}

for (int i = lenb - 1, j = 0; i >= 0; i--){
num2[j++] = b[i] - '0';
}
for (int i = 0; i < LEN; i++){
num1[i] += num2[i];
}
/*****************求和*******************/
for (int i = 0; i < LEN; i++)
{
if (num1[i] >= 10){
num1[i + 1] += num1[i] / 10;
num1[i] %= 10;
}
}
/************打印************************/
int i;
for (i = LEN - 1; i > 0; i--){
if (num1[i] != 0)
break;
}
for (; i >= 0; i--)
cout << num1[i];
cout << endl;
}

void mul(char a[], char b[])
{
/****************装换****************/
int num1[LEN];
int num2[LEN];
for (int i = 0; i < LEN; i++){
num1[i] = 0;
num2[i] = 0;
}
int lena = strlen(a);
int lenb = strlen(b);

for (int i = lena - 1, j = 0; i >= 0; i--){
num1[j++] = a[i] - '0';
}

for (int i = lenb - 1, j = 0; i >= 0; i--){
num2[j++] = b[i] - '0';
}
/************************乘积*************/
int sum[LEN];
for (int i = 0; i < LEN; i++){
sum[i] = 0;
}

for (int i = 0; i < lena; i++)
for (int j = 0; j < lenb; j++){
sum[i + j] += num1[i] * num2[j];
if (sum[i + j] >= 10){
sum[i + j + 1] += sum[i + j] / 10;
sum[i + j] %= 10;
}
}
/*******************打印*******************/
int i;
for (i = LEN - 1; i > 0; i--){
if (sum[i] != 0)
break;
}
for (; i >= 0; i--)
cout << sum[i];
cout << endl;
}

void mod(char a[],int mod){
///****************装换****************/
//int num1[LEN];
//int num2[LEN];
//for (int i = 0; i < LEN; i++){
//	num1[i] = 0;
//	num2[i] = 0;
//}
int lena = strlen(a);
//int lenb = strlen(b);

//for (int i = lena - 1, j = 0; i >= 0; i--){
//	num1[j++] = a[i] - '0';
//}

//for (int i = lenb - 1, j = 0; i >= 0; i--){
//	num2[j++] = b[i] - '0';
//}
/***********取余*********************/
int ans = 0;
for (int i = 0; i < lena; i++){
ans = ans * 10 + a[i] - '0';
ans = ans % mod;
}
cout << ans << endl;
}

void sub(char a[], char b[]){
int alen = strlen(a);
int blen = strlen(b);

int num1[LEN];
int num2[LEN];
for (int i = 0; i < LEN; i++){
num1[i] = 0;
num2[i] = 0;
}

for (int i = alen - 1,j = 0; i >= 0; i--){
num1[j++] = a[i] - '0';
}
for (int i = blen - 1,j = 0; i >= 0; i--){
num2[j++] = b[i] - '0';
}

int flag = 0;
if (alen > blen){
for (int i = 0; i < LEN; i++){
num1[i] -= num2[i];
}
for (int i = 0; i < LEN; i++){
if (num1[i] < 0){
num1[i+1] -= 1;
num1[i] += 10;
}
};
}

if (alen < blen){
for (int i = 0; i < LEN; i++){
num2[i] -= num1[i];
}
for (int i = 0; i < LEN; i++){
if (num2[i] < 0){
num2[i+1] -= 1;
num2[i] += 10;
}
}
flag = 1;
}

int ti;
if (alen == blen){
for (int i = 0; i < LEN; i++){
if (a[i] != b[i]){
ti = i;
break;
}
if (i == LEN - 1)
cout << 0 << endl;
}
if (a[ti] > b[ti]){
for (int i = 0; i < LEN; i++){
num1[i] -= num2[i];
}
for (int i = 0; i < LEN; i++){
if (num1[i] < 0){
num1[i + 1] -= 1;
num1[i] += 10;
}
}
}

else{
for (int i = 0; i < LEN; i++){
num2[i] -= num1[i];
}
for (int i = 0; i < LEN; i++){
if (num2[i] < 0){
num2[i + 1] -= 1;
num2[i] += 10;
}
}
flag = 1;
}
}

int i;
if (flag == 0){
for (i = LEN - 1; i > 0; i--){
if (num1[i] != 0)
break;
}
for (; i >= 0; i--){
cout << num1[i];
}
cout << endl;
}
if (flag == 1){
cout << "-";
for (i = LEN - 1; i > 0; i--){
if (num2[i] != 0)
break;
}
for (; i >= 0; i--){
cout << num2[i];
}
cout << endl;
}
}

int main()
{
char a[] = "2345";
char b[] = "234567";
add(a, b);
mul(a, b);
mod(a, 10);
sub(a, b);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: