codeVS 3115 高精度练习之减法

来源:互联网 发布:苹果mac怎么更新不了 编辑:程序博客网 时间:2024/05/28 23:21

时间限制:1s 空间限制:64000KB题目等级:黄金 Gold


题目描述


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


输入描述


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


输出描述


输出A-B的值


样例输入


3 12


样例输出


-9


解题思路


1、用字符串形式输入a,b两个大数

2、判断a,b两串长度,即两个数的位数

3、若位数相同,则 ①从最高位开始按位比较,发现a<b就交换两数,使a为两数中较大数  ②从个位开始做减法运算  ③输出结果

若位数不同,则 ①直接比较两数位数,保证a为两数中较大数  ②从个位开始按位做减法,直到较小数b的最高位,把结果存放到新字符串c中  ③把a剩余的位存入c中  ④c的倒序输出即为相减结果


AC代码如下:

#include<iostream>using namespace std;int main(){    string a,b;    cin>>a>>b;    if( a.length()==b.length() ){        //按位检测,确保a>b        for( int i=0;i<a.length();i++ ){            if( a[i]==b[i] ){                continue;            }            if( a[i]>b[i] ){                break;            }            if( a[i]<b[i] ){                swap(a,b);                cout<<"-";                break;            }        }        //按位做减法        for( int i=a.length()-1;i>=0;i-- ){            if( a[i]>=b[i] ){                a[i]=a[i]-b[i]+'0';            }            else{                a[i]=a[i]+10-b[i]+'0';                --a[i-1];            }        }        cout<<a<<endl;    }    else{//a,b位数不等        //调整使a>b        if( a.length()<b.length() ){            cout<<"-";            swap(a,b);        }        string c;        int lc=0,i,j;        for( i=a.length()-1,j=b.length()-1 ; j>=0 ; --i,--j ){            if( a[i]>=b[j] ){                c[lc++]=a[i]-b[j]+'0';            }            else{                c[lc++]=a[i]+10-b[j]+'0';                --a[i-1];            }        }        for( int p=i;p>=0;--p ){            c[lc++]=a[p];        }        //避免高位输入0(1234-567输出0667这样的情况)        int flag=0;        for( int q=lc-1;q>=0;q-- ){            if( c[q]==0 && flag==0 ){                continue;            }            else if( c[q]!=0 ){                flag=1;                cout<<c[q];            }            else if( c[q]==0 && flag==1 ){                cout<<c[q];            }        }        cout<<endl;    }    return 0;}


0 0
原创粉丝点击