微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数相减-c++

/*题目:输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结
/果。
/大数一般会超出长整型的范围,所以用字符串存储数据然后按照减法运算法则实现就成了。
/string类成员函数功能强大!
*/

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

int compare(string &num1,string &num2)
{
    int l1 = num1.size();
    int l2 = num2.size();
    if(l1>l2)
        return 1;
    else if(l1<l2)
        return 2;
    else 
        for(int i=0;i<l1;i++)
          {
            if(num1[i]>num2[i])
                return 1;
            else if(num1[i]<num2[i])
                return 2;
           } 
    return 0;
}

string minus(string &num1,string &num2)
{
    //num1>nun2
    int len1= num1.size();
    int len2= num2.size();
    int flag = 0;
    int temp=0;
    string result;
    for(int i=0;i<len2;i++)
    {
        temp=num1[len1-1-i]-num2[len2-1-i]-flag;
        if(temp<0){
            flag=1;
            temp = temp+10;
            result.push_back(temp+'0');
        }
        else {
            flag=0;
            result.push_back(temp+'0');     
        }
    }
    for(int i=len1-len2-1;i>=0;i--)
    {
        temp = num1[i]-'0'-flag;
        if(temp<0)
        {
            flag =1;
            result.push_back(temp+10+'0');      
        }
        else
        {
            flag=0;
            result.push_back(temp+'0');     

        }
    }
    int len3 = result.size();
    int num=0;
    for(int i=0;i<len3;i++)
        if(result[i]==0)
            num++;
        else
            break;
    if(num>0)
        result.erase(len3-num);
    num = result.size();
    char c;
    for(int i=0;i<num/2;i++)
    {
        c = result[i];
        result[i]=result[num-1-i];
        result[num-1-i] = c;
    }


    return result;


}
void main()
{
    string num1,num2;
    cin>>num1>>num2;
    int flag=0;
    string result;
    flag = compare(num1,num2);
    if(flag==0)
        {
        result='0';
    }
    if(flag==1)
        result = minus(num1,num2);
    if(flag==2){
        result.push_back('-');
        result.append(minus(num2,num1)); 
    }
    cout<<result;
    return ;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐