超长加减计算器(免费)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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[])