大数加,减,乘,取余一起
发布时间:2020-12-14 01:52:39 所属栏目:大数据 来源:网络整理
导读:#includeiostream#includestring#define LEN 100using 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
#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--){ 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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |