有人能帮忙看看吗
#include <stdio.h>
#include <math.h>
#include <string.h>
struct info
{
int num[10005], len;
char oper;
info(void);
void correct(void);
};
info::info()
{
memset (num, 0, sizeof(num));
len = 1;
oper = '+';
}
void info::correct(void)
{
int t = len;
while (num[t] == 0 && t >= 1)
t--;
len = t;
return;
}
bool operator > (info A, info B)
{
if (A.oper == '+' && B.oper == '-') return true;
if (A.oper == '-' && B.oper == '+') return false;
if (A.oper == '+' && B.oper == '+')
{
if (A.len > B.len) return true;
if (A.len < B.len) return false;
for (int i = A.len; i >= 1; i--)
{
if (A.num[i] > B.num[i]) return true;
if (A.num[i] < B.num[i]) return false;
}
}
if (A.oper == '-' && B.oper == '-')
{
if (A.len > B.len) return false;
if (A.len < B.len) return true;
for (int i = A.len; i >= 1; i--)
{
if (A.num[i] > B.num[i]) return false;
if (A.num[i] < B.num[i]) return true;
}
}
return false;
}
info operator + (info A, info B)
{
info re;
re.len = A.len > B.len ? A.len : B.len;
for (int i = 1; i <= re.len; i++)
{
re.num[i] += A.num[i] + B.num[i];
if (re.num[i] >= 10)
{
re.num[i + 1] += re.num[i] / 10;
re.num[i] %= 10;
re.len = (i + 1 > re.len) ? (i + 1) : re.len;
}
}
return re;
}
info operator - (info A, info B)
{
info re;
if (B > A)
{
info tmp = A;
A = B;
B = tmp;
re.oper = '-';
}
re.len = A.len;
for (int i = 1; i <= A.len; i++)
{
re.num[i] += (A.num[i] - B.num[i]);
if (re.num[i] < 0)
{
re.num[i] += 10;
re.num[i + 1] -= 1;
}
}
re.correct();
return re;
}
info operator * (info A, info B)
{
info re;
re.len = A.len + B.len + 1;
for (int i = 1; i <= A.len; i++)
for (int j = 1; j <= B.len; j++)
re.num[i + j - 1] += A.num[i] * B.num[j];
for (int i = 1; i <= re.len; i++)
if (re.num[i] >= 10)
{
re.num[i + 1] += re.num[i] / 10;
re.num[i] %= 10;
re.len = (i + 1 > re.len) ? (i + 1) : re.len;
}
re.correct();
return re;
}
info operator / (info A, info B)
{
info re;
if (B > A) return re;
re.len = A.len - B.len + 1;
for (int i = A.len; i >= B.len; i--)
{
info tmp;
tmp.len = i;
for (int j = B.len, k = i; j >= 1; j--, k--)
tmp.num[k] = B.num[j];
while (!(tmp > A))
{
A = A - tmp;
re.num[i - B.len + 1]++;
}
}
re.correct();
return re;
}
info operator % (info A, info B)
{
if (B > A) return A;
for (int i = A.len; i >= B.len; i--)
{
info tmp;
tmp.len = i;
for (int j = B.len, k = i; j >= 1; j--, k--)
tmp.num[k] = B.num[j];
while (!(tmp > A))
A = A - tmp;
}
return A;
}
info getInfo()
{
info tmp, tar;
char c;
int i = 1, j;
while (true)
{
c = getchar();
if (c == '\n')
break;
if (c == ' ')
continue;
tmp.num[i] = c - '0';
tmp.len = (tmp.len < i) ? i : tmp.len;
i++;
}
tar.len = tmp.len;
j = 1;
for (i = tmp.len; i >= 1; i--, j++)
tar.num[j] = tmp.num[i];
return tar;
}
void printInfo(info tar)
{
if (tar.oper == '-')
printf ("-");
bool flag = 0;
for (int i = tar.len; i >= 1; i--)
if (flag == 1 || tar.num[i] != 0)
{
printf ("%d", tar.num[i]);
flag = 1;
}
if (flag == 0)
printf ("0");
}
int main()
{
info a = getInfo(), b = getInfo();
printInfo (a + b);
printf ("\n");
printInfo (a - b);
printf ("\n");
printInfo (a * b);
printf ("\n");
printInfo (a / b);
printf ("\n");
printInfo (a % b);
printf ("\n");
return 0;
}