大数相加减
.写一个函数,实现大整数的相加,相减。
大整数:即没有任何数据类型可以保存到的数据
*/
#include<stdio.h>
#include<string.h>
char result[100] = {'0'};
int l1,l2;
int flag = 0;
int i,j,k;
void num_add(char* num1,char* num2)
{
l1 = strlen(num1);
l2 = strlen(num2);
if(l1 > l2)
{
k = 0;
for(i = l1-1,j = l2-1;i >= l1-l2,j >= 0;i--,j--)
{
result[k] = (num1[i] - '0') + (num2[j] - '0') + flag;
flag = 0;
if(result[k] >= 10)
{
flag = 1;
result[k] = result[k] % 10;
}
k++;
}
for(;i >= 0;i--)
{
result[k] = (num1[i] - '0') + flag;
flag = 0;
if(result[k] >= 10 && i != 0)
{
flag = 1;
}
k++;
}
}
else if(l1 == l2)
{
k = 0;
for(i = l1-1;i >= 0;i--)
{
result[k] = (num1[i] - '0') + (num2[i] - '0') + flag;
flag = 0;
if(result[k] >= 10 && i != 0)
{
flag = 1;
result[k] = result[k] % 10;
}
k++;
}
}
else
{
k = 0;
for(i = l1-1,j = l2-1;i >= 0,j >= l2-l1;i--,j--)
{
result[k] = (num1[i] - '0') + (num2[j] - '0') + flag;
flag = 0;
if(result[k] >= 10)
{
flag = 1;
result[k] = result[k] % 10;
}
k++;
}
for(;j >= 0;j--)
{
result[k] = (num2[j] - '0') + flag;
flag = 0;
if(result[k] >= 10 && j != 0)
{
flag = 1;
}
k++;
}
}
for(k = k-1;k >= 0;k--)
{
printf("%d",result[k]);
}
puts("");
}
void num_subtraction(char* num1,char* num2)
{
l1 = strlen(num1);
l2 = strlen(num2);
if(l1 > l2)
{
k = 0;
for(i = l1-1,j = l2-1;i >= l1-l2,j >= 0;i--,j--)
{
if(num1[i] < num2[j])
{
flag = 10;
num1[i - 1] -= 1;
}
result[k] = (num1[i] - '0' + flag) - (num2[j] - '0');
flag = 0;
k++;
}
for(;i >= 0;i--)
{
result[k++] = num1[i] - '0';
}
}
else if(l1 == l2)
{
k = 0;
for(i = 0;i < l1;i++)
{
if(num1[i] > num2[i])
{
for(j = l2-1;j >= 0;j--)
{
if(num1[j] < num2[j])
{
flag = 10;
num1[j - 1] -= 1;
}
result[k] = (num1[j] - '0') + flag - (num2[j] - '0');
flag = 0;
k++;
}
for(k = k;k >= 0;k--)
{
printf("%d",result[k]);
}
puts("");
return;
}
if(num1[i] < num2[i])
{
for(j = l2-1;j >= 0;j--)
{
if(num2[j] < num1[j])
{
flag = 10;
num2[j - 1] -= 1;
}
result[k] = (num2[j] - '0') + flag - (num1[j] - '0');
flag = 0;
k++;
}
printf("-");
for(k = k;k >= 0;k--)
{
printf("%d",result[k]);
}
puts("");
return;
}
}
printf("0\n");
return;
}
else
{
k = 0;
for(i = l1-1,j = l2-1;i >= 0,j >= l2-l1;i--,j--)
{
if(num2[j] < num1[i])
{
flag = 10;
num2[j - 1] -= 1;
}
result[k] = (num2[j] - '0' + flag) - (num1[i] - '0');
flag = 0;
k++;
}
for(;j >= 0;j--)
{
result[k++] = num2[j] - '0';
}
printf("-");
}
for(k = k - 1;k >= 0;k--)
{
printf("%d",result[k]);
}
puts("");
}
int main()
{
char a[100] = {'0'};
char b[100] = {'0'};
char ch;
scanf("%s %c %s",a,&ch,b);
if(ch == '+')
{
num_add(a,b);
}
if(ch == '-')
{
num_subtraction(a,b);
}
return 0;
}