#include <stdio.h>
int main (void)
{
int number; // 输入存放的位置
int number_a[500]; // 用来存放 第一个 数的各个数字
int number_b[500]; // 用来存放 第二个 数的各个数字
int san[500]; // 用来存放 处理过后的第一个 数的各个数字
int sam[500]; // 用来存放 处理过后的第二个 数的各个数字
int ji[500]; // 用来存放 结果 的各个数字
int i = 0; // 初始化变量
int x = 0; // 存放 i 值的 变量
int a,b,c,d,sha,sa; // 记录输入的数字有多少位数
int ch = 0; // 初始化判断数
puts ("请输入一个数");
number = getchar ();
// 把这个数的每一个数字存入 number_a 这个数组的元素中 并打印这个数
while (number != '\n')
{
number_a[i] = number;
putchar (number_a[i]);
number = getchar ();
i++;
}
a = i; // 记录输入的数字有多少位数
c = i; // 同上
printf ("\n");
i = 0;
puts ("请输入一个数");
number = getchar ();
// 把这个数的每一个数字存入 number_b 这个数组的元素中 并打印这个数
while (number != '\n')
{
number_b[i] = number;
putchar (number_b[i]);
number = getchar ();
i++;
}
b = i; // 记录输入的数字有多少位数
d = i; // 同上
// 判断两个数的位数,并将不足的位置初始化为 0
// 将数组 number_a 与 number_b 中的各个数字进行处理,并将这些处理后的数存入数组 san 与 sam
if (a != b)
{
if (a > b)
{
for (i = 0;i <= a;i++)
san[i] = (number_a[i] - 48);
for (i = 0;b < c;b++)
{
sam[i] = 0;
i++;
}
b = d;
for (x = 0;i <= a;i++)
{
sam[i] = (number_b[x] - 48);
x++;
}
sha = a;
}
else
{
for (i = 0;i <= b;i++)
sam[i] = (number_b[i] - 48);
for (i = 0;a < d;a++)
{
san[i] = 0;
i++;
}
a = c;
for (x = 0;i <= b;i++)
{
san[i] = (number_a[x] - 48);
x++;
}
sha = b;
}
}
else
{
for (i = 0;i <= a;i++)
{
san[i] = (number_a[i] - 48);
sam[i] = (number_b[i] - 48);
}
sha = a;
}
sa = sha; // sa 记录两个数的位数不同情况下的较大值
x = i; // x 记录两个数的位数相同情况下的值
// 加法的实现
printf ("\n 加法运算结果: \n");
// 将两个数组相对应的元素中的数相加
while (sha > 0)
{
ji[sha-1] = san[sha-1] + sam[sha-1];
if (ji[sha] >= 10)
ji [sha-1] += 1;
else
{
}
sha--;
}
sha = sa; // 恢复 sha 的值
// 打印结果
printf ("%d",ji[0]);
for (i = 1;i < sha;i++)
{
if (ji[i] >= 10)
printf ("%d",ji[i] - 10);
else
printf ("%d",ji[i]);
}
printf ("\n\n\n");
// 减法的实现
printf ("\n 减法运算结果: \n");
// 判断两个数的大小
for (i = 0;i < x;i++)
{
if (san[i] > sam[i])
{
ch = 0;
break;
}
else
{
if (san[i] < sam[i])
{
ch = 1;
break;
}
}
}
i = x; // 恢复 i 的值
// 如果数组 san 的值大于数组 sam 的值,san - sam ,并打印结果
// 否则 sam - san , 并用负数打印结果
if (ch == 0)
{
// 将两个数组相对应的元素中的数相减
// 如果后一位数的值小于 0 那么这位数就 - 1
// ji[sha] > -10 的作用,由于最后一位数没有进行赋值,所以要进行排除
while (sha > 0)
{
ji[sha-1] = san[sha-1] - sam[sha-1];
if (ji[sha] < 0 && ji[sha] > -10)
ji[sha-1] -= 1;
else
{
}
sha--;
}
sha = sa; // 恢复 sha 的值
// 如果相减之后的值为负数,则将其 + 10
while (sha > 0)
{
if (ji[sha-1] < 0)
ji[sha-1] += 10;
else
{
}
sha--;
}
// 打印结果
printf ("\n");
printf ("%d",ji[0]);
for (i = 1;i < a;i++)
printf ("%d",ji[i]);
}
else // sam - san , 并用负数打印结果
{
while (i > 0)
{
ji[sha-1] = sam[sha-1] - san[sha-1];
if (ji[sha] < 0 && ji[sha] > -10)
ji[sha-1] -= 1;
else
{
}
sha--;
}
printf ("\n");
if (ch = 1)
printf ("-");
else
{
}
printf ("%d",ji[0]);
for (i = 1;i < x - 1;i++)
{
if (ji[i] < 0) // 另一中 如果相减之后的值为负数,则将其 + 10
printf ("%d",ji[i] + 10);
else
printf ("%d",ji[i]);
}
}
puts ("\n");
system ("pause");
}