大数(string类型)相乘

#include<iostream>
#include<string>

using namespace std;


//两个字符串相加
string add(string str1, string str2){
    string result = "";
    if(str1.size() < str2.size()){
        int length = str2.size()-str1.size();
        for(int i = 0; i < length; i++){
            str1 = "0" + str1;
        }
    }
    else if(str1.size() > str2.size()){
        int length = str1.size()-str2.size();
        for(int i = 0; i < length; i++){
            str2 = "0" + str2;
        }
    }else;
    
    int add = 0;
    int num;
    for(int i = str1.size()-1; i >= 0; i--){
        num = (str1[i] - 48) + (str2[i] - 48) + add;
        if(num >= 10){
            add = 1;
            num = num -10;
            result = (char)(num+48) + result;
        }else{
            result = (char)(num+48) + result;
            add = 0;
        }
    }
    if(add == 1){
        result = "1" + result;
    }
    return result;
}


//第一个参数为字符串,第二个参数为单个字符
string multiply(string str1, char str2){
    int num = str2 - 48;
    string result = "0";
    if( num == 0){
        return "0";
    }else{
        for(int i = 0; i < num; i++){
            result = add(str1, result);
        }
    }
    return result;
}


int main(){
    string str1, str2;
    cin >> str1 >> str2;
    string result = "0";
    int length1 = str1.size();
    int length2 = str2.size();
    if(length1 > length2){
        for(int i = length2-1; i >= 0; i--){
            string str = multiply(str1, str2[i]);
            for(int j = 0; j < length2-1-i; j++){
                str = str+"0";
            }
            result = add(result, str);
        }
    }
    else{
        for(int i = length1-1; i >= 0; i--){
            string str = multiply(str2, str1[i]);
            for(int j = 0; j < length1-1-i; j++){
                str = str+"0";
            }
            result = add(result, str);
        }
    }
    cout << result << endl; //
}




 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值