华为机试题—大数相减-c++

来源:互联网 发布:许朝军 知乎 编辑:程序博客网 时间:2024/05/22 00:09

/*题目:输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结
/果。
/大数一般会超出长整型的范围,所以用字符串存储数据然后按照减法运算法则实现就成了。
/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 ;}
0 1
原创粉丝点击