大数加减法 C语言 包含负数
发布时间:2020-12-14 02:38:19 所属栏目:大数据 来源:网络整理
导读:#define _CRT_SECURE_NO_WARNINGS #includestdio.h #define MAXSIZE 10 void Add(char a[],char b[],char c[]); void Sub(char a[],char c[]); int Get_len(char a[]); bool Max_a(char a[],char b[]); int main(void) { char a[MAXSIZE]; char b[MAXSIZE];
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #define MAXSIZE 10 void Add(char a[],char b[],char c[]); void Sub(char a[],char c[]); int Get_len(char a[]); bool Max_a(char a[],char b[]); int main(void) { char a[MAXSIZE]; char b[MAXSIZE]; char sum[MAXSIZE]; bool symbol = true; bool maxa = true; scanf("%s",a); scanf("%s",b); if (*a != '-'&&*b != '-') { symbol = true; Add(a,b,sum); } else if (*a == '-'&&*b == '-') { symbol = false; Add(a+1,b+1,sum); } else { if (*a == '-') { maxa = Max_a(a+1,b); if (maxa) { symbol = false; Sub(a+1,sum); } else { symbol = true; Sub(b,a+1,sum); } } else { maxa = Max_a(a,b+1); if (maxa==true) { symbol = true; Sub(a,b + 1,sum); } else { symbol = false; Sub(b + 1,a,sum); } } } if (!symbol) printf("-"); int slen = Get_len(sum); while (slen >=0) { printf("%c",sum[slen--]); } return 0; } void Add(char a[],char c[]) { int alen = Get_len(a); int blen = Get_len(b); int clen = 0; for (int i = 0; i < MAXSIZE; i++) { c[i] = '0'; } while (alen >= 0 && blen >= 0) { c[clen] = a[alen--] + b[blen--] + c[clen] - 48 - 48; if (c[clen]>57) { c[clen] = c[clen] - 10; ++c[clen+1]; } ++clen; } while (alen >= 0) { c[clen] = a[alen--] + c[clen] - 48; if (c[clen]>57) { c[clen] = c[clen] - 10; ++c[clen + 1]; } ++clen; } while (blen >= 0) { c[clen] = b[blen--] + c[clen] - 48; if (c[clen]>57) { c[clen] = c[clen] - 10; ++c[clen + 1]; } ++clen; } if (c[clen] != 48) ++clen; c[clen] = ' '; } void Sub(char a[],char c[]) { int alen = Get_len(a); int blen = Get_len(b); int clen = 0; int symble = 0; for (int i = 0; i < MAXSIZE; i++) c[i] = '0'; while (blen >= 0) { c[clen] = a[alen--] - b[blen--] - symble + 48; if (c[clen] < 48) { c[clen] += 10; symble = 1; } else symble = 0; ++clen; } while (alen >= 0) { c[clen] = a[alen--] + c[clen] - symble - 48; if (c[clen] < 48) { c[clen] = c[clen] + 10; symble = 1; } else symble = 0; ++clen; } while (c[clen-1] == '0') --clen; c[clen] = ' '; } int Get_len(char a[]) { for (int i = 0; i < MAXSIZE; i++) { if (a[i] == ' ') return i-1; } } bool Max_a(char a[],char b[]) { int alen = Get_len(a); int blen = Get_len(b); if (alen>blen) return true; else if (alen < blen) return false; else { for (int i = 0; i <=alen; i++) { if (a[i] > b[i]) return true; if (a[i] < b[i]) return false; } } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |