您的位置:首页 > 其它

大数减法

2016-04-29 11:09 197 查看
这个程序比较多,但是思路很简单,只要求取大数减小数,如果是小数减大数,转换成大数减小数,输出负号

void sub(char a[], char b[]){
int alen = strlen(a);
int blen = strlen(b);

int num1[LEN];
int num2[LEN];
for (int i = 0; i < LEN; i++){
num1[i] = 0;
num2[i] = 0;
}

for (int i = alen - 1,j = 0; i >= 0; i--){
num1[j++] = a[i] - '0';
}
for (int i = blen - 1,j = 0; i >= 0; i--){
num2[j++] = b[i] - '0';
}

int flag = 0;
if (alen > blen){
for (int i = 0; i < LEN; i++){
num1[i] -= num2[i];
}
for (int i = 0; i < LEN; i++){
if (num1[i] < 0){
num1[i+1] -= 1;
num1[i] += 10;
}
};
}

if (alen < blen){
for (int i = 0; i < LEN; i++){
num2[i] -= num1[i];
}
for (int i = 0; i < LEN; i++){
if (num2[i] < 0){
num2[i+1] -= 1;
num2[i] += 10;
}
}
flag = 1;
}

int ti;
if (alen == blen){
for (int i = 0; i < LEN; i++){
if (a[i] != b[i]){
ti = i;
break;
}
if (i == LEN - 1)
cout << 0 << endl;
}
if (a[ti] > b[ti]){
for (int i = 0; i < LEN; i++){
num1[i] -= num2[i];
}
for (int i = 0; i < LEN; i++){
if (num1[i] < 0){
num1[i + 1] -= 1;
num1[i] += 10;
}
}
}

else{
for (int i = 0; i < LEN; i++){
num2[i] -= num1[i];
}
for (int i = 0; i < LEN; i++){
if (num2[i] < 0){
num2[i + 1] -= 1;
num2[i] += 10;
}
}
flag = 1;
}
}

int i;
if (flag == 0){
for (i = LEN - 1; i > 0; i--){
if (num1[i] != 0)
break;
}
for (; i >= 0; i--){
cout << num1[i];
}
cout << endl;
}
if (flag == 1){
cout << "-";
for (i = LEN - 1; i > 0; i--){
if (num2[i] != 0)
break;
}
for (; i >= 0; i--){
cout << num2[i];
}
cout << endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: