当前位置:文档之家› 超长加减计算器(免费)

超长加减计算器(免费)

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#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<len;k++)
*(a+k)=*(a+k+sft);
for(k=len;k<N;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[])
{
int m = length(x), n = length(y);
if(m > n)
return 1;
else if(m < n)
return 0;
else if(x[n - 1] > y[n - 1])
return 1;
else
return 0;
}
void calculation(int x[], int y[], int z[], char oper, int* sign) {
switch(oper)
{
case '+':
plus(x, y, z);
break;
case '-':
if (greater(x, y))
{
minus(x, y, z);
*sign = 1;
}
else
{
minus(y, x, z);
*sign = 0;
}
break;
}
}。

相关主题