zoukankan      html  css  js  c++  java
  • 高精度减法

    减法比加法难在两个地方,一个是向上一位借位,这个代码实现比较容易,基本思路是把加法的向上进位改为减掉借位的1,就比较好实现了

    第二个,是被减数比减数大,我的解决方案是把减得过程写成函数,在执行函数前进行一下判断,假设是a-b,当a<b就先输出-号,然后算b-a

    代码实现如下

        #include<iostream>
        #include<cstdio>
        #include<algorithm>
        #include<cmath>
        #include<cstring>
        #include<string>
        using namespace std;
        char a1[1000],b1[1000];
        int a[1000],b[1000],c[1000],x,i,lena,lenb;
        void jian(int a[],int b[])
        {
            int m=max(lena,lenb);
            for(i=0;i<m;i++)
            {
                c[i]=a[i]-b[i]-x;//不能直接赋值,要加上前面的退位
                if(c[i]<0)
                {
                    x=1;
                    c[i]+=10;
                }
            }
            m++;
        }
        int main()
        {
            scanf("%s",a1);scanf("%s",b1);//scanf就爆0!
            
            if(a1[0]==48&&b1[0]==48)
            {
                cout<<"0"<<endl;
                return 0;
            }
            lena=strlen(a1),lenb=strlen(b1);
            for(i=0;i<lena;i++)
            {
                a[lena-i-1]=int(a1[i]-48);
            }
            for(i=0;i<lenb;i++)
            {
                b[lenb-i-1]=int(b1[i]-48);//倒序输入便于进位
            }
            i=0;
            if(strcmp(a1,b1)<=0)
            {
                printf("-");
                jian(b[i],a[i]);
            }
            else
            jian(a[i],b[i]);   
            m--; //删除前导0
            for(int i=m;i>=0;i--)
                cout<<c[i];
            cout<<endl;
            return 0;
    }
  • 相关阅读:
    [洛谷P2523] HAOI2011 Problem c
    [CF156D] Clues
    [洛谷P4769] NOI2018 冒泡排序
    [CF605E] Intergalaxy Trips
    [洛谷P4492] HAOI2018 苹果树
    [洛谷P3349] ZJOI2016 小星星
    [洛谷P4336] SHOI2016 黑暗前的幻想乡
    [洛谷P5364] SNOI2017 礼物
    [洛谷P2606] ZJOI2010 排列计数
    [洛谷P6078] CEOI2004 candy
  • 原文地址:https://www.cnblogs.com/this-is-M/p/10464747.html
Copyright © 2011-2022 走看看