哈喽,好久不见,最近学业比较多,所以断更了很久,昨天心血来潮,更新!!!

以前我就做过一个计算器,可是十分辣鸡,不但是分开的,而且也只有两种运算,所以必须更新啊!

于是我重操旧业——打广告(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”发现代码消失了,谢谢)

本站作者已申明原创,禁止转载!

文章内容属作者个人观点,不代表本站立场,如有侵权立删。

   口袋儿题库-青少儿编程自测题库