大数乘法的分治策略C++实现

博主在Coursera的算法课中初次接触分治算法,并以此解决大位整数乘法问题。通过自学C++,经过一天的调试,成功写出不完整的代码。博主强调多实践和自我实现的重要性,分享了初次尝试的兴奋和代码中的不足。
摘要由CSDN通过智能技术生成

最近学习Coursera上的算法课,刚开始接触分治算法(Divide & Conquer),第一周的测试题为两个大位整数的乘法,结合自己自学的弱爆的C++,各种查资料还调了一整天的Bug才写出来个不完整的东西。只怪自己平时代码敲得少,不熟练。很多bug遇到过就会对此很敏感,所以多去造轮子,多尝试自己去实现才是最快的学习方法。哈哈哈,一堆废话,自勉之~

下面是自己写的源码,其中还有许多不妥的地方,第一次写(捂脸跑~)完好兴奋呀。。。

#include <stdio.h>
#include <iostream>
#include <list>
#include <iterator>
#include <string>

using namespace std;


void PrintList(list<char>& m); //计算结果输出函数
void PrintMenu();   //功能菜单
list<char> TransForm(string &s); //转换函数
list<char> BigAdd(list<char>&a, list<char>&b); //大数加法
list<char> BigSub(list<char>&a, list<char>&b); //大数减法
list<char> BigMul(list<char>&a, list<char>&b); //大数乘法
void BigDev();   大数除法,没实现
//list<char> result;  //设为全局变量,则可以返回其引用以节省内存开销,    但在递归时不知道怎么处理。。。
int main(int argc, char *argv[])
{
    list<char> num1, num2;
    list<char> result;
    char choice;
    string input1, input2;
    while (true)
    {
        cout << "**********************************" << endl;
        cout << "   大整数计算器 VER1.0    " << endl;
        cout << "**********************************" << endl;
        PrintMenu();
        result.clear();
        cin >> choice;
        fflush(stdin);  //清空缓冲区,删去多余输入
        switch (choice)
        {
        case '1':
            cout << "请输入第一个数  " << endl;
            cin >> input1;
            num1 = TransForm(input1);
            cout << "请输入第二个数  " << endl;
            cin >> input2;
            num2 = TransForm(input2);
            result = BigAdd(num1, num2);
            PrintList(num1);
            cout << " + ";
            PrintList(num2);
            cout << &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值