大数运算!(2)减法

简介: 大数运算!(2)减法

求a-b.

思路如下:

1.定义一个函数使数组逆向输出;

2.定义三个数组,求两个数组的长度,调用字符串逆值函数,比较两个数组的长度,当某个数长度小的时候,就在前面补“0”,之后让i依次为数组里的数,求该位数字的值,当两数相减为负数时,即像上一位借位,然后相当于给负数加上10,再进行下一位计算时,记得给被减数-1。

3.循环结束时,若前面的数为零,则不输出,应输出数组中非零的数据,再依次输出。

#include <bits/stdc++.h>
using namespace std;
void rev(char a[], int len)
{
    for(int i = 0; i < len / 2; ++i)
        swap(a[i],a[len - i - 1]);
}
char a[1000],b[1000],s[1000];
int main()
{
    int ai, bi, val, bit;
    int len, len1, len2;
    while(cin >> a >> b) {
        len1 = strlen(a);
        len2 = strlen(b);
        len = len1 > len2 ? len1 : len2;
        rev(a,len1);
        rev(b,len2);
        bit = 0;
        for(int i = 0; i < len; ++i){
            ai = i < len1 ? a[i] - '0' : 0;
            bi = i < len2 ? b[i] - '0' : 0;
            ai -= bit;
            bit = 0;
            if(ai < bi){
                ai+=10;
                bit += 1;
            }
            s[i] = ai - bi + '0';
        }
        bool flag = true;
        for(int i = len - 1; i >= 0; --i){
            if(s[i] == '0' && flag) continue;
            flag = false;
            putchar(s[i]);
        }puts("");
    }return 0;
}

PS:以上是c++的代码,区别就是cin,布尔类型等的区别。

下面贴上c的代码:

#include <stdio.h>
#include <string.h>
void rev(char str[],int len){
    int t,i;
    for (i = 0;i < len / 2;i++){
        t = str[i];
        str[i] = str[len - i - 1];
        str[len -  i - 1] = t;
    }
}
int main()
{
    char str1[1000],str2[1000],sum[1000];
    int len,len1,len2,i;
    int l1,l2,val,carry;
    while(scanf("%s %s",str1,str2) != EOF){
    len1 = strlen(str1);
    len2 = strlen(str2);
    rev(str1,len1);
    rev(str2,len2);
    carry = 0;
    len = len1 < len2 ? len2:len1;
    for (i = 0;i <= len;i++){
        l1 = i < len1 ? str1[i] - '0':0;
        l2 = i < len2 ? str2[i] - '0':0;
        l1 -= carry;
        carry = 0;
        if (l1 < l2){
            l1 += 10;
            carry += 1;
        }
        sum[i] = l1 - l2 +'0';
        }
        int flag = 1;
        for(i = len - 1;i >= 0; i--){
            if(sum[i] =='0' && flag)
                continue;
            flag = 0;
            putchar(sum[i]);
        }puts("");
    }return 0;
}


相关文章
|
5月前
|
Python
首先,我们可以从基本的数学运算开始,比如加法、减法、乘法、除法等。
首先,我们可以从基本的数学运算开始,比如加法、减法、乘法、除法等。
|
7月前
|
计算机视觉
加法运算
【5月更文挑战第8天】加法运算。
151 4
|
7月前
|
存储
原码,补码的乘法运算
原码,补码的乘法运算
120 0
|
7月前
X 进制减法问题
X 进制减法问题
36 0
|
7月前
|
C++
C++系列-第1章顺序结构-6-加法、减法和乘法
C++系列-第1章顺序结构-6-加法、减法和乘法
|
7月前
大整数加法_大整数减法
大整数加法_大整数减法