#include "stdio.h"
#include "string.h"
#define N 1000
#include <stdlib.h>
void csh()
{
printf("\t\t\t\t------百位算法--------\n"
"\t\t\t\t| 加法:1 |\n"
"\t\t\t\t| 减法:2 |\n"
"\t\t\t\t| 乘法:3 |\n"
"\t\t\t\t| 程序结束:4 |\n"
"\t\t\t\t| 重新开始:0 |\n"
"\t\t\t\t---------------------- ");
}
void abc()
{
system("cls");
csh();
}
void HighPlus(char x1[], char x2[]);
void HighMinus(char x1[], char x2[]);
void HighMultiply(char x1[], char x2[]);
void Output(int a[], int n);
int compare(char a[], char b[]);
int main()
{
csh();
int a,b,sf=1,js;
char x1[N], x2[N];
for(int i=1;i<=1000;i++)
{
if(a==4)
{
break;
}
printf("\n请输入算法序号:");
scanf("%d",&a);
while(1)
{
if(a<=0||a>=5)
{
if(a==0)
{
abc();
break;
}
printf("\n输入错误请重新输入算法名称");
break;
}
if(a==4)
{
break;
}
printf("\n请输入值用空格隔开:\n");
scanf("%s %s",&x1,&x2);
switch(a)
{
case 1:
HighPlus(x1, x2);
break;
case 2: HighMinus(x1, x2);
break;
case 3: HighMultiply(x1, x2);
break;
default : break;
}
printf("\n\n\t\t>>是否继续(1/0)<<:");
scanf("%d",&sf);
if(sf==0)
{
break;
}
}
}
printf("\t\t\n""<程序结束>""");
return 0;
}
void HighPlus(char x1[], char x2[])
{
int i, j, n, n1 = strlen(x1), n2 = strlen(x2);
int a[N] = { 0 }, b[N] = { 0 };
for (i = n1 - 1, j = 0; i >= 0; i--)
a[j++] = x1[i] - '0';
for (i = n2 - 1, j = 0; i >= 0; i--)
b[j++] = x2[i] - '0';
if (n1 > n2)
n = n1;
else
n = n2;
for (i = 0; n > i; i++)
{
a[i] += b[i];
a[i + 1] += a[i] / 10;
a[i] = a[i] % 10;
}
if (a[n] != 0)
n = n + 1;
Output(a, n);
}
void HighMinus(char x1[], char x2[])
{
int i, j = 0, n, n1 = strlen(x1), n2 = strlen(x2);
int a[N] = { 0 }, b[N] = { 0 };
for (i = n1 - 1, j = 0; i >= 0; i--)
a[j++] = x1[i] - '0';
for (i = n2 - 1, j = 0; i >= 0; i--)
b[j++] = x2[i] - '0';
if (compare(x1, x2) == 1)
{
n = n1;
for (i = 0; n > i; i++)
{
a[i] -= b[i];
if (a[i] < 0)
a[i] += 10, a[i + 1]--;
}
while (a[n - 1] == 0)
n = n - 1;
Output(a, n);
}
else
{
n = n2;
for (i = 0; n > i; i++)
{
b[i] -= a[i];
if (b[i] < 0)
b[i] += 10, b[i + 1]--;
}
printf("-");
while (b[n - 1] == 0)
n = n - 1;
Output(b, n);
}
}
void HighMultiply(char x1[], char x2[])
{
int i, j = 0, n, n1 = strlen(x1), n2 = strlen(x2);
int a[N] = { 0 }, b[N] = { 0 }, c[1000] = { 0 };
for (i = n1, j = 1; i >= 1; i--)
a[j++] = x1[i - 1] - '0';
for (i = n2, j = 1; i > 0; i--)
b[j++] = x2[i - 1] - '0';
for (i = 1; n1 >= i; i++)
{
for (j = 1; n2 >= j; j++)
{
c[i + j - 1] += a[i] * b[j];
c[i + j] += c[i + j - 1] / 10;
c[i + j - 1] %= 10;
}
}
n = i + j;
while (c[n] == 0 && n > 1)
n--;
for (i = n; i >= 1; i--)
{
printf("%d", c[i]);
}
}
void Output(int a[], int n)
{
int i;
for (i = n - 1; i >= 0; i--)
printf("%d", a[i]);
}
int compare(char a[], char b[])
{
if (strlen(a) > strlen(b))
return 1;
if (strlen(a) < strlen(b))
return 0;
if (strcmp(a, b) > 0)
return 1;
return 0;
}