哈喽,好久不见,最近学业比较多,所以断更了很久,昨天心血来潮,更新!!!
以前我就做过一个计算器,可是十分辣鸡,不但是分开的,而且也只有两种运算,所以必须更新啊!
于是我重操旧业——打广告(bushi)
是更新~ ~ ~ 嘻嘻嘻
#include <bits/stdc++.h> //万能头,不解释啦 using namespace std; //计算用的数组,嘻嘻嘻 // 第1个数 第2个数 第3个数 // ↓ ↓ ↓ int A[1010], B[1010], sum[10010]; //字符串转换到数组中,方便运算 void s2BIG(string s, int a[]) { int la = s.length(); for (int i = 1; i <= la; i++) { a[i] = s[la - i] - '0'; } a[0] = la; } //加法运算,是数组之间的相加 void addBIG(int x[], int y[], int z[]) { z[0] = max(x[0], y[0]); for (int i = 1; i <= z[0]; i++) z[i] = x[i] + y[i]; for (int i = 1; i <= z[0]; i++) { z[i + 1] += z[i] / 10; z[i] %= 10; if (z[z[0] + 1] > 0) z[0]++; } } //减法运算,将数组相减在保存 void subBIG(int x[], int y[], int z[]) { z[0] = max(x[0], y[0]); for(int i = 1; i <= z[0]; i++) { z[i] = x[i] - y[i]; } for(int i = 1; i <= z[0]; i++) { if(z[i] < 0) { z[i] += 10; z[i + 1]--; } } while(z[z[0]] == 0 && z[0] > 1) z[0]--; } //乘法运算,不过只能大整数和小证书相乘 void mulBIG(int x[], int y, int z[]) { z[0] = x[0]; for (int i = 1; i <= z[0]; i++) { z[i] = x[i] * y; } for (int i = 1; i <= z[0]; i++) { z[i + 1] += z[i] / 10; z[i] %= 10; if(z[z[0] + 1] > 0) z[0]++; } } //除法和乘法一样,不如加减可以算的多 void divBIG(int x[], int y, int z[]) { z[0] = x[0]; int r = 0; for(int i = z[0]; i >= 1; i--) { int t = r * 10 + x[i]; z[i] = t / y; r = t % y; } while(z[z[0]] == 0 && z[0] > 1) z[0]--; } //输出过程,打包带走,哈哈 void printBIG(int a[]) { int la = a[0]; for (int i = la; i >= 1; i--) { cout << a[i]; } cout << endl; } //为了取绝对值,先行比较 bool cmpBIG(int x[], int y[]) { int lx = x[0], ly = y[0]; if(lx != ly) return lx < ly; for(int i = lx; i >= 1; i--) { if(x[i] != y[i]) return x[i] < y[i]; } return false; } int main() { string f; cin >> f; string s1, s2; int i; cin >> s1; s2BIG(s1, A); if(f == "+" || f == "-") //判断是加减法,因为他们算的快,可以都是大整数 { cin >> s2; s2BIG(s2, B);//大整数输入和处理 if(f == "+") addBIG(A, B, sum); //是加法,用addBIG() else //减法不一样,要判断 { //取绝对值的过程 //十分抽象,不好理解,自己看看。 if(cmpBIG(A, B)) { subBIG(B, A, sum); } else { subBIG(A, B, sum); } } } else //乘除法只能string和int计算 { cin >> i; //int输入 if(f == "*") //乘法 mulBIG(A, i, sum); else //除法 divBIG(A, i, sum); } printBIG(sum); //输出结束,完结撒花!!!!!!!! //*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。 return 0; }
这次我加入了减法和除法,不过还是有弊端,不如乘除法数织依然不能太大,所以看到的大佬快来更新吧 QAQ
欢迎提意见和改编(感谢“I love Scratch”发现代码消失了,谢谢)
本站作者已申明原创,禁止转载!
文章内容属作者个人观点,不代表本站立场,如有侵权立删。