超长加减计算器(免费)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

#include

#define N 500

void shift(int *,int n);

void plus(int x[], int y[], int z[]);

void minus(int x[], int y[], int z[]);

void show(int z[]);

void input(int x[], int y[], char *op);

int length(int a[]);

int greater(int x[], int y[]);

void calculation(int x[], int y[], int z[], char oper, int *sign); void main()

{

int exp1[10][N], exp2[10][N], result[10][N + 1], sign[10];

char option[10];

int i, n;

printf("请输入你要计算的算式数目:\n");

scanf("%d", &n);

getchar();

printf("请依次输入各算式:\n");

for(i = 0; i < n; i++)

{

printf("第%d个算式的表达式为: ", i + 1);

input(exp1[i], exp2[i], &option[i]);

calculation(exp1[i], exp2[i], result[i], option[i], &sign[i]); }

for(i = 0; i < n; i++)

{

printf("第%d个算式的结果是: ", i + 1);

if (!sign[i])

putchar('-');

show(result[i]);

}

system("pause");

}

void plus(int x[], int y[], int z[])

{

int i, carry = 0;

for(i = 0;i < N + 1; i++)

*(z+i) = 0;

for(i = 0;i < N; i++)

{

*(z+i)=*(x+i)+*(y+i)+carry;

carry=(*(z+i)-*(z+i)%10)/10;

*(z+i)%=10,*(z+i)+='0';

}

*(z+N)=carry+'0';

}

void minus(int x[], int y[], int z[])

{

int i, n, carry = 0, temp;

for(i = 0;i < N + 1; i++)

*(z+i) = 0;

n = length(x) > length(y) ? length(x) : length(y); for(i = 0;i < n; i++)

{

temp = *(x + i) - *(y + i);

if(temp >= 0)

{

*(z + i) = temp - carry;

if(*(z + i) < 0)

{

*(z + i) += 10;

carry = 1;

}

else

carry = 0;

}

else

{

*(z + i) = temp + 10 - carry;

carry = 1;

}

if(*(z + i) > 9)

*(z + i) -= 10;

*(z+i)+='0';

}

for(i = N; i >= n; i--)

*(z + i) = '0';

}

void shift(int *a,int n)

{

int k,len,sft;

len=N-1-n;

sft=N-len;

for(k=0;k

*(a+k)=*(a+k+sft);

for(k=len;k

*(a+k)=0;

}

void show(int z[])

{

int i, flag;

flag = 0;

for(i = N; i >= 0; i--)

{

if(!flag && *(z + i)!='0') flag = 1;

if(flag) putchar(*(z+i));

}

putchar('\n');

}

void input(int x[], int y[], char *op)

{

int i;

i = N - 1;

while(i >= 0 && isdigit(*(x + i) = getchar())) *(x + i--) -= '0';

*op = (char)(*(x + i));

if(i >= 0) shift(x,i);

i = N - 1;

while(i >= 0 && isdigit(*(y + i) = getchar())) *(y + i--) -= '0';

if(i >= 0) shift(y,i);

}

int length(int a[])

{

int i, n = 0;

if(!a[N - 1])

{

n = 1;

for(i = N - 1; i >= 0; i--)

{

if(!a[i - 1])

n++;

else

break;

}

}

return N - n;

}

int greater(int x[], int y[])

相关文档
最新文档