(C++)字符串相乘

简介: (C++)字符串相乘

个人主页:Lei宝啊

愿所有美好如期而遇


题目链接如下:

题目

思路

我们首先不能将字符串全部转换为数字,因为存储不下,而且注意也不允许,所以我们应该想到用一个字符串尾部的单位乘一个字符串,然后存储得到的字符串,再由尾部的倒数第二位乘,再存储结果字符串,并且根据位数在结果字符串后补0,最终得到的所有结果字符串相加,就是我们的答案。

字符串相加:(C++)字符串相加

图解

代码

string multiply(string num1, string num2) 
    {
        if(num1 == "0" || num2 == "0")
        {
            return "0";
        }
        int s1 = num1.size();
        int s2 = num2.size();
        if(s1 > s2)
        {
            num1.swap(num2);
            s1 = num1.size();
            s2 = num2.size();
        }
        int count = 0;
        string s[201];
        for(int i=s1-1; i>=0; i--)
        {
            int ch1 = num1[i] - 48;
            int add = 0;
            for(int j=s2-1; j>=0; j--)
            {
                int ch2 = num2[j] - 48;
                s[i] += ch2 * ch1 % 10 + 48 + add;
                add = ch2 * ch1 / 10;     
            }
            if(add > 0)
            {
                s[i] += add + 48;
            }
            reverse(s[i].begin(),s[i].end());
            for(int k=0; k<count; k++)
            {
                s[i] += '0';
            }
            count++;
        }
        string result;
        for(int i=0; i<s1; i++)
        {
            result = addStrings(result,s[i]);
        }
        return result;
    }
string addStrings(string num1, string num2) 
    {
        string result;
        int next = 0;
        char tmp1 = 0;
        char tmp2 = 0;
        while(!num1.empty() || !num2.empty())
        {
            if(!num1.empty())
                tmp1 = num1[num1.size()-1] - 48;
            else
                tmp1 = 0;
            if(!num2.empty())
                tmp2 = num2[num2.size()-1] - 48;
            else
                tmp2 = 0;
            int sum = tmp1 + tmp2 + next;
            next = sum / 10;
            sum %= 10;
            result += (sum+48);
            if(!num1.empty())
                num1.erase(num1.end()-1);
            if(!num2.empty())
                num2.erase(num2.end()-1);
        }
        if(next > 0)
            result += '1';
        reverse(result.begin(),result.end());
        return result;
    }


目录
相关文章
|
6天前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
55 1
|
6天前
|
对象存储 C++
在C++语言中字符串流
在C++语言中字符串流
18 2
|
6天前
|
并行计算 Go C++
2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
【2月更文挑战第19天】2182.构造限制重复的字符串(模拟 贪心 优先队列 C++ Go)
23 1
|
6天前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
36 6
|
6天前
|
存储 C++ 索引
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++的字符串使用`string`类处理,如`string greeting = &quot;Hello&quot;`。字符串连接可通过`+`或`append()`函数实现。访问字符使用索引,如`myString[0]`。`length()`或`size()`可获取长度。`getline()`用于读取整行输入。注意转义字符如`\\&quot;`用于在字符串中嵌入双引号。使用`cin`读取字符串时,空格会终止输入,而`getline()`能读取整行。
27 0
|
1天前
|
C++
【C++基础】C++中的字符串
【C++基础】C++中的字符串
5 0
|
1天前
|
存储 C++
C++程序中的字符串与指针
C++程序中的字符串与指针
8 2
|
6天前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
6天前
|
存储 编译器 C语言
C++字符串大小写之for语句
C++字符串大小写之for语句
20 0
|
6天前
|
C++
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
15 0