⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 很大很大数的加减法终结版.c

📁 大一时候 我们老师上课留的C语言思考题 我写的解答程序的源代码。。。
💻 C
字号:
#include<stdio.h>
#include<string.h>
#define PR printf
static int d;//外部变量,不建议像我这样使用~~
void transform(int a[],char b[])//该函数为将字符串组改存为整形数组并逆序存放
{
	int i,j;
	for(i=strlen(b)-1,j=0;i>=0;i--,j++)
		a[i]=b[j]-'0';
}

void calculate(char s1[],char s2[],char sign,int a[],int b[],int z[])
{
	int i,j,d1,d2;
	d1=strlen(s1);
	d2=strlen(s2);
	d=d1>d2?d1:d2;
	transform(a,s1);
	transform(b,s2);
	PR("你所要计算的算式答案为:\n");
	if(sign=='+')
	{
		for(i=0;i<d;i++)
		{
			z[i]+=(a[i]+b[i]);
			if(z[i]>=10)
			{
				j=i;
				z[j]-=10;
				z[++j]+=1; 
			}
		}
	}
	else if(sign=='-')
	{
		if((d1>=d2)&&strcmp(s1,s2)>=0)//比较a与b的大小
		{
			for(i=0;i<d;i++)
			{
		      z[i]+=(a[i]-b[i]);
			  if(z[i]<0)
			  {
				j=i;
				z[j]+=10;
				z[++j]-=1;
			  }
			}
		}
		else
		{
			for(i=0;i<d;i++)
			{
		    z[i]+=(b[i]-a[i]);
			if(z[i]<0)
			{
				j=i;
				z[j]+=10;
				z[++j]-=1;
			}
			}
			PR("-");//如果b比a大则输出负号
		}

	}
	for(;z[d]==0&&d>0;d--);//空过数组前为0的部分
}
void main()
{
	int a[1000]={0},b[1000]={0},z[1000]={0};
	char s1[1000],s2[1000],sign;
	PR("请输入第一个数字\n");
	gets(s1);
    PR("请输入'+'or'-'\n");
	scanf("%c",&sign);
	getchar();//如果没了它,又会怎样呢?
	PR("请输入第二个数字\n");
	gets(s2);
	calculate(s1,s2,sign,a,b,z);
	for(;d>=0;d--)
		PR("%d",z[d]);
	PR("\n");
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -