📄 很大很大数的加减法终结版.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 + -