• JDOJ 1790: 高精度A-B


    JDOJ 1790: 高精度A-B

    JDOJ传送门

    洛谷 P2142 高精度减法

    洛谷传送门

    题目描述

    高精度减法

    输入格式

    两个整数a,b(第二个可能比第一个大)

    输出格式

    结果(是负数要输出负号)

    输入输出样例

    输入 #1复制

    输出 #1复制

    说明/提示

    20%数据a,b在long long范围内

    100%数据0 < a,b leq 10^{10086}0<a,b≤1010086

    题解:

    (注:本题在JDOJ上的提交是输出超限的,本人一阵蒙圈,无奈请各位大佬指正)

    (但是洛谷AC是没问题的)

    高精度减法的模板题(QWQ)

    减法的原理其实也是模拟,坑点一是借位,坑点二是判负输出。

    代码漏洞百出,请大佬指正:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxx=1e5+1;
    const int INF=1e5;
    char aa[maxx],bb[maxx];
    int a[maxx],b[maxx],flag;
    int main()
    {
        scanf("%s%s",aa+1,bb+1);
        int lena=strlen(aa+1);
        int lenb=strlen(bb+1);
        for(int i=1;i<=lena;i++)
            a[i]=aa[lena-i+1]-'0';
        for(int i=1;i<=lenb;i++)
            b[i]=bb[lenb-i+1]-'0';
        if(lena<lenb)
        {
            for(int i=1;i<=lenb;i++)
                swap(a[i],b[i]);
            flag=1;
        }
        int lenc=max(lena,lenb);
        for(int i=1;i<=lenc;i++)
        {
            a[i]=a[i]-b[i];
            if(a[i]<0)
                a[i]+=10,a[i+1]--;
        }
        int t=INF;
        if(flag)
            printf("-");
        while(!a[t])
        {
            t--;
            if(t==0)
            {
                printf("0");
                return 0;
            }
        }
        if(a[t]==-1)
        {
            printf("-");
            t--;
        }
        for(int i=t;i>=1;i--)
            printf("%d",a[i]);
        return 0;
    }
    
  • 相关阅读:
    vim讲解
    tar常用解包
    linux扩展权限
    为Virtualbox中的Solaris10安装VBoxAdditions
    Solaris10下Telnet、SSH、ftp使用root登录
    linux软链接和硬链接
    curl命令学习(转载的)
    linux磁盘分区fdisk命令详解
    在服务器上排除问题的头五分钟
    Java对文件压缩/加密/解密/解压缩的例子,DES/RSA
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11597510.html
Copyright © 2020-2023  润新知