1017. A除以B (20):做完挺开心的一道=.=

作者通过一段尝试解决“段错误”的代码调试过程,详细记录了从困惑、尝试、失败到最终解决问题的心路历程。文章不仅展示了作者面对复杂调试难题时的坚韧与思考,还分享了代码优化的方法,强调了在编程实践中遇到困难时保持耐心和冷静的重要性。通过实例,作者阐述了如何在调试过程中发现问题、解决问题,并最终实现代码的高效运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结(吐槽):算法不是很清晰 思路就是 简单模拟手算除法  模拟过程中想到用栈 后来调试过程中发现多此一举 

                         之所以开心 是因为 做了三个小时 期间 调试N次 试错 N次 最终剩下一个测试数据 提示 “段错误” 

                         几近绝望  坐到窗前看了一会儿喷泉··· 想删了代码 从新模拟··· 可是一想到 之前碰到类似的稍微复杂的模拟题 就是总有那么几个测试数据过不去心里特别扭 

                         知道自己的 逻辑有问题 调试能力 还欠缺 我就又老老实实 坐回原位 打开电脑 调试原来的 程序 幸运的是 想到一种数据 ··· 并该类相关逻辑 ···全过了···好开森···

这片代码 不具有参考价值 仅仅是试错调试的练习 网上有其他更简洁代码···无奈自己还是太弱···

珍贵经历代码如下

#include<iostream>
#include<string>
#include<vector>
#include<stack>
using namespace std;
int main()
{
        stack<int>StackA;//被除数A 栈表示
        vector<int>VectorQ;//商
        string StringA;// 被除数A string表示
        int i, B, IntA, R;// 局部 被除数 A 以及 除数 B
        cin>>StringA>>B;
        for( i=StringA.length()-1; i>=0; i-- ){
              StackA.push( StringA[i]-'0' );
        }
        IntA = 0;
        while( !StackA.empty() )
        {
            IntA=IntA*10 + StackA.top();
            StackA.pop();
            if( StackA.empty() )
            {
                R=IntA%B;
                VectorQ.push_back(IntA/B);
                break;
            }
            while( IntA/B==0&&!StackA.empty() )
            {
                if( !VectorQ.empty() )
                     VectorQ.push_back(0);
                IntA = IntA*10 + StackA.top();
                StackA.pop();
            }
            VectorQ.push_back(IntA/B);
            IntA=IntA%B;
            R=IntA;
        }
        if( VectorQ.size()==1 && VectorQ[0]==0)
            cout<<0;
        else
        for( i=0; i<VectorQ.size(); i++ ){
                if(i==0)
                    while(VectorQ[i]==0)
                           i++;
            cout<<VectorQ[i];
        }
        cout<<" "<<R<<endl;
        return 0;
}

8.19版

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
#include<string>
#include<vector>
#include<sstream>// stringstrearm
using namespace std;
string A, Q;
int i,B, num;

int fun(char c)
{
        num*=10;
        num+=c-'0';
        Q+=(num/B)+'0';
        return num%B;
}

int main()
{
        cin>>A>>B;
        num=0;

        for( i=0; i<A.size(); i++)
                num=fun(A[i]);
        for(i=0; i<Q.size(); i++)
            if(Q[i]!='0'){
                Q=Q.substr(i);
                break;
            }
        cout<<Q<<" "<<num<<endl;
        return 0;
}
思路清晰了不少 做着也快多了 难道编程能力真的有所提高?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值