zoukankan      html  css  js  c++  java
  • 3115 高精度练习之减法——http://codevs.cn/problem/3115/

    第一部分:题目

    题目描述 Description

    给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。

    输入描述 Input Description

    读入两个用空格隔开的正整数

    输出描述 Output Description

    输出A-B的值

    样例输入 Sample Input

    3 12

    样例输出 Sample Output

    -9

    数据范围及提示 Data Size & Hint

    两个正整数的位数不超过500位

    第二部分:思路

     具体看代码注释

    第三部分:代码

    #include<stdio.h>
    #include<string.h>
    void repai(char s[500],int len)//把数组倒置 
    {
        int i,j=len-1;
        char t;
        for(i=0;i<j;i++)
        {
            j=len-i-1;//相当于以中点对折。 
            t=s[i];
            s[i]=s[j];
            s[j]=t;
        }
    }
    void compute(char a[500],int alen,char b[500],int blen,char sign)//进行减法计算 
    {
        int result[501],length=0;
        int i,j,flag=0;
        repai(a,alen);//倒置 
        repai(b,blen);
        int t;
        for(i=0;i<alen&&i<blen;i++)//从个位开始相减 
        {
            t=a[i]-b[i]+flag;
            if(t<0)//判断是否需要借1 
            {
                t+=10;
                flag=-1;
            }
            else//这里稍微注意一下,当前不需要借1时置为0 
            {
                flag=0;
            }
            result[length++]=t;
        }
        while(i<alen)
        {
            t=a[i]-'0'+flag;
            if(t<0)
            {
                t+=10;
                flag=-1;
            }
            else
            {
                flag=0;
            }
            result[length++]=t;
            i++;
        }
        while(i<blen)
        {
            t=b[i]-'0'+flag;
            if(t<0)
            {
                t+=10;
                flag=-1;
            }
            else
            {
                flag=0;
            }
            result[length++]=t;
            i++;
        }
        if(flag==-1||sign=='-')//差为负有两种情况:1.被减数比减数短。2.被减数与减数一样长,但小 
        {
            printf("-");
        }
        int begin=0;//用于减去前置0,比如123减120,数组中存的是003,00不要。 
        for(i=length-1;i>=0;i--)
        {
            if(result[i]==0&&begin==0)
            {
                begin=1;
            }
            else
            {
                begin=1;
                printf("%d",result[i]);
            }
        }
        printf("
    ");
    } 
    int main()
    {
        char a[500],b[500];//接收数a、b 
        scanf("%s %s",a,b);
        int alen,blen;
        alen=strlen(a);//数组a、b长度 
        blen=strlen(b);
        if(alen<blen)//数a比数b短,用b减a,差为负 
        {
            compute(b,blen,a,alen,'-');
        }
        else
        {
            if(alen==blen&&strcmp(a,b)<0)//两个数长度相同时就需要进行比较了,用大的减小的 
            {
                compute(b,blen,a,alen,'-');
            }
            else
            {
                compute(a,alen,b,blen,'+');
            }    
        }
        return 0;
    }
  • 相关阅读:
    自定义字体(特殊字体)在网页中的应用
    面向对象中的接口和多态
    抽象类和抽象方法
    python简单的函数定义和用法实例
    python简单的函数定义和用法实例
    Python变量和字符串详解
    Python变量和字符串详解
    大数据产业发展 三大模式可毕其功于一役
    大数据产业发展 三大模式可毕其功于一役
    python实现基于两张图片生成圆角图标效果的方法
  • 原文地址:https://www.cnblogs.com/xiangguoguo/p/5380739.html
Copyright © 2011-2022 走看看