哈喽,好久不见,最近学业比较多,所以断更了很久,昨天心血来潮,更新!!!
以前我就做过一个计算器,可是十分辣鸡,不但是分开的,而且也只有两种运算,所以必须更新啊!
于是我重操旧业——打广告(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”发现代码消失了,谢谢)
本站作者已申明原创,禁止转载!
文章内容属作者个人观点,不代表本站立场,如有侵权立删。






