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

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

                         之所以开心 是因为 做了三个小时 期间 调试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;
}
思路清晰了不少 做着也快多了 难道编程能力真的有所提高?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值