高精度算法之减法

Description

输入两个整数a和b,输出这两个整数的差。a和b都不超过100位。

Input

输入包括两行,第一行为一个非负整数a(被减数),第二行为一个非负整数b(减数)。两个整数都不超过100位,两数的最高位都不是0。

Output

输出一行,表示a - b的值。

Sample Input

99999999999999999999
99999999
123
321

Sample Output

99999999999900000000
-198

思路:典型的高精度问题,当大数减小数好说,关键是考虑怎么用小数减大数时的情况,比如说800减去1000时,先把800换成0800,就是小数和大数先换成一样的位数,再去比较他们的字典序,然后接下来再赋值给int数组,借位什么的就简单了.

代码如下:

#include<iostream>
#include<cstring>
using namespace std;

char num_1[101],num_2[101],temp[101];
char num_1_new[101],num_2_new[101];
int Num_1[101],Num_2[101],Sum[101];

int max(int a,int b)
{
    if (a>b){return a;}
    return b;
}

int main(){
    while(cin>>num_1>>num_2){
    memset(Sum,0,sizeof(Sum));
    memset(temp,'0',sizeof(temp));
    memset(num_1_new,'0',sizeof(num_1_new));
    memset(num_2_new,'0',sizeof(num_2_new));

    int length_1 = strlen(num_1);
    int length_2 = strlen(num_2);
    int x=max(length_1,length_2);
  
    if(length_2 >= length_1)
    {
        int x = length_2-length_1;
        for(int i=length_2;i>=0;i--)
            num_2_new[i] = num_2[i];

        for(int j=length_1;j>=0;j--)
            num_1_new[j+x] = num_1[j];

    }
    else if(length_1>length_2){
        int x = length_1-length_2;
        for(int i=length_1;i>=0;i--)
            num_1_new[i] = num_1[i];

        for(int j=length_2;j>=0;j--)
            num_2_new[j+x] = num_2[j];

    }

    if(strcmp(num_1_new,num_2_new)<0){
        strcpy(temp,num_1_new);
        strcpy(num_1_new,num_2_new);
        strcpy(num_2_new,temp);
        cout<<"-";
    }

    for(int i=0;i<x;i++)
        Num_1[x-i-1] = num_1_new[i]-48;
    for(int i=0;i<x;i++)
        Num_2[x-i-1] = num_2_new[i]-48;



    for(int i=0;i<x;i++)
    {
            Sum[i] = Num_1[i]-Num_2[i];
            if(Sum[i]<0)
            {
               Num_1[i+1] --;
               Num_1[i]+=10;
               Sum[i] = Num_1[i]-Num_2[i];
            }

    }
    while(Sum[x]==0&&x>0){
        x--;
    }
    for(int i=x;i>=0;i--)
        cout<<Sum[i];
        cout<<endl;

    }

}
发布了69 篇原创文章 · 获赞 50 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/89048633