大数运算模板
发布时间:2020-12-14 03:35:13 所属栏目:大数据 来源:网络整理
导读:#include stdio.h#include string.h# includemalloc.hint dividor(char* a,int b,char* c) //返回余数,商保存在c[]{int i,j,temp = 0,n;char* s;n = strlen(a);s = (char*)malloc(sizeof(char)*(n + 1));for (i = 0; a[i] != 0; i++){temp = temp * 10 + a[
#include <stdio.h> #include <string.h> # include<malloc.h> int dividor(char* a,int b,char* c) //返回余数,商保存在c[] { int i,j,temp = 0,n; char* s; n = strlen(a); s = (char*)malloc(sizeof(char)*(n + 1)); for (i = 0; a[i] != 0; i++) { temp = temp * 10 + a[i] - '0'; s[i] = temp / b + '0'; temp %= b; } s[i] = ' '; for (i = 0; s[i] == '0'&&s[i] != ' '; i++); if (s[i] == ' ') { c[0] = '0'; c[1] = ' '; } else { for (j = 0; s[i] != ' '; i++,j++) c[j] = s[i]; c[j] = ' '; } free(s); return temp; } void mul(char *a,char *b,char *c) //大数乘法,结果保存在c[] { int temp[2500]; int i,l; int la = strlen(a); int lb = strlen(b); for (i = 0; i < la + lb; i++) temp[i] = 0; for (i = la - 1; i >= 0; i--) { l = la - 1 - i; for (j = lb - 1; j >= 0; j--) { temp[l] = (b[j] - '0')*(a[i] - '0') + temp[l]; l++; } } while (temp[l] == 0) l--; for (i = 0; i <= l; i++) { temp[i + 1] += temp[i] / 10; temp[i] = temp[i] % 10; } if (temp[l + 1] != 0) l++; while (temp[l] / 10 != 0) { temp[l + 1] += temp[l] / 10; temp[l] = temp[l] % 10; l++; } if (temp[l] == 0) l--; i = 0; while (l >= 0) { c[i] = temp[l] + '0'; i++; l--; } c[i] = ' '; } void add(char* a,char* b,char* c)//大数加法,结果保存在c[] { int i,k,max,min,n,temp; char *s,*pmax,*pmin; max = strlen(a); min = strlen(b); if (max < min) { temp = max; max = min; min = temp; pmax = b; pmin = a; } else { pmax = a; pmin = b; } s = (char*)malloc(sizeof(char)*(max + 1)); s[0] = '0'; for (i = min - 1,j = max - 1,k = max; i >= 0; i--,j--,k--) s[k] = pmin[i] - '0' + pmax[j]; for (; j >= 0; j--,k--) s[k] = pmax[j]; for (i = max; i >= 0; i--) if (s[i] > '9') { s[i] -= 10; s[i - 1]++; } if (s[0] == '0') { for (i = 0; i <= max; i++) c[i - 1] = s[i]; c[i - 1] = ' '; } else { for (i = 0; i <= max; i++) c[i] = s[i]; c[i] = ' '; } free(s); } void subtract(char* a,char* c) //大数减法,结果保存在c[] { int i,ca,cb; ca = strlen(a); cb = strlen(b); if (ca > cb || (ca == cb&&strcmp(a,b) >= 0)) { for (i = ca - 1,j = cb - 1; j >= 0; i--,j--) a[i] -= (b[j] - '0'); for (i = ca - 1; i >= 0; i--) if (a[i] < '0') { a[i] += 10; a[i - 1]--; } i = 0; while (a[i] == '0') i++; if (a[i] == ' ') { c[0] = '0'; c[1] = ' '; } else { for (j = 0; a[i] != ' '; i++,j++) c[j] = a[i]; c[j] = ' '; } } else { for (i = ca - 1,j = cb - 1; i >= 0; i--,j--) b[j] -= (a[i] - '0'); for (j = cb - 1; j >= 0; j--) if (b[j] < '0') { b[j] += 10; b[j - 1]--; } j = 0; while (b[j] == '0') j++; i = 1; c[0] = '-'; for (; b[j] != ' '; i++,j++) c[i] = b[j]; c[i] = ' '; } } int main() { char a[100],b[100],c[100]; while (scanf("%s%s",a,b) != EOF) { subtract(a,b,c); puts(c); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |