码迷,mamicode.com
首页 > 编程语言 > 详细

大数加减法 C语言 包含负数

时间:2015-04-18 20:39:25      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:c   算法   

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXSIZE 10
void Add(char a[], char b[], char c[]);
void Sub(char a[], char b[], char c[]);
int Get_len(char a[]);
bool Max_a(char a[], char b[]);
int main(void)
{
char a[MAXSIZE];
char b[MAXSIZE];
char sum[MAXSIZE];
bool symbol = true;
bool maxa = true;
scanf("%s", a);
scanf("%s", b);
if (*a != ‘-‘&&*b != ‘-‘)
{
symbol = true;
Add(a, b, sum);
}
else if (*a == ‘-‘&&*b == ‘-‘)
{
symbol = false;
Add(a+1, b+1, sum);
}
else
{
if (*a == ‘-‘)
{
maxa = Max_a(a+1, b);
if (maxa)
{
symbol = false;
Sub(a+1, b, sum);
}
else
{
symbol = true;
Sub(b, a+1, sum);
}
}
else
{
maxa = Max_a(a, b+1);
if (maxa==true)
{
symbol = true;
Sub(a, b + 1,sum);
}
else
{
symbol = false;
Sub(b + 1, a, sum);
}
}
}
if (!symbol)
printf("-");
int slen = Get_len(sum);
while (slen >=0)
{
printf("%c", sum[slen--]);
}
return 0;
}
void Add(char a[], char b[], char c[])
{
int alen = Get_len(a);
int blen = Get_len(b);
int clen = 0;
for (int i = 0; i < MAXSIZE; i++)
{
c[i] = ‘0‘;
}
while (alen >= 0 && blen >= 0)
{
c[clen] = a[alen--] + b[blen--] + c[clen] - 48 - 48;
if (c[clen]>57)
{
c[clen] = c[clen] - 10;
++c[clen+1];
}
++clen;
}
while (alen >= 0)
{
c[clen] = a[alen--] + c[clen] - 48;
if (c[clen]>57)
{
c[clen] = c[clen] - 10;
++c[clen + 1];
}
++clen;
}
while (blen >= 0)
{
c[clen] = b[blen--] + c[clen] - 48;
if (c[clen]>57)
{
c[clen] = c[clen] - 10;
++c[clen + 1];
}
++clen;
}
if (c[clen] != 48)
++clen;
c[clen] = ‘\0‘;
}
void Sub(char a[], char b[], char c[])
{
int alen = Get_len(a);
int blen = Get_len(b);
int clen = 0;
int symble = 0;
for (int i = 0; i < MAXSIZE; i++)
c[i] = ‘0‘;
while (blen >= 0)
{
c[clen] = a[alen--] - b[blen--] - symble + 48;
if (c[clen] < 48)
{
c[clen] += 10;
symble = 1;
}
else
symble = 0;
++clen;
}
while (alen >= 0)
{
c[clen] = a[alen--] + c[clen] - symble - 48;
if (c[clen] < 48)
{
c[clen] = c[clen] + 10;
symble = 1;
}
else
symble = 0;
++clen;
}
while (c[clen-1] == ‘0‘)
--clen;
c[clen] = ‘\0‘;
}
int Get_len(char a[])
{
for (int i = 0; i < MAXSIZE; i++)
{
if (a[i] == ‘\0‘)
return i-1;
}
}
bool Max_a(char a[], char b[])
{
int alen = Get_len(a);
int blen = Get_len(b);
if (alen>blen)
return true;
else if (alen < blen)
return false;
else
{
for (int i = 0; i <=alen; i++)
{
if (a[i] > b[i])
return true;
if (a[i] < b[i])
return false;
}
}
}

大数加减法 C语言 包含负数

标签:c   算法   

原文地址:http://blog.csdn.net/u013897132/article/details/45115639

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!