反转的数字相加

  数字的反转数:一个数,将其首尾倒置。例如4321的反转数便是1234。

  编写一个程序,接受两个数字,并输出他们的反转数的和的反转数。例如,24和1。那么结果就是42+1->43->34

  注意,数字反转以后,数字的最前面和最后面不可能出现0!那么在先处理两个数相加的结果时,应该将最后方的0删除掉!

  如何避免多次的数字反转操作呢?可以参考自定义大数相加的算法!将数字按位相加,进行进位操作等!

  但是这里应该把两个数高位对齐再相加,相加时,从最高位加到最低位,并向低位进位,因为最后要反转过来!例如:1234与891的反转和,4321+198->4519->9154。表示为1234+8910->1+8, 2+9, 3+1+1, 4+0->9154。只需要一次的反转操作!

  注意,这里,接受两个数字的时候,按照字符串接收!

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    string sa,sb,st;
    vector<int> v;
    vector<int>::iterator it;
    int i,j,a,b;
    int sum=0;
    int p=0;    // 进位标志
    int u=0;    // 输出标志

    cin>>sa>>sb;
    // 保证sa长度大于sb
    if(sa.size()<sb .size())
    {
        st=sa;
        sa=sb;
        sb=st;
    }
    for(i=0;i<sa.size();i++)
    {
        a = (sa[i]-'0') + 0;

        if(i >= sb.size())
            b = 0;
        else
            b = (sb[i]-'0') + 0;

        sum = a+b+p;
        p = sum / 10;
        v.push_back(sum%10);
    }

    // 最后一次进位
    if(p==1)
        v.push_back(1);

    // 删除后面的所有0
    while(1)
    {
        // 向量的最后一个元素的it位置为end()-1
        it = v.end()-1;
        if(*it==0)
            v.erase(it);
        else
            break;
    }

    // 实现从左边第一个非零开始输出
    for(j=0;j<v.size();j++)
    {
        if(u==0 && v[j]!=0)
            u=1;
        if(u==1)
            cout<<v[j];
    }
    cout<<endl;

    return 0;
}



Related posts

, ,
Address: http://blog.okkey.net/1102.html,转载请注明出处。
Trackback

44 comments untill now

  1. 这是c还是c++?

    [回复]

    Kada 回复:

    兄的沙发居然被当作垃圾评论了,我才发现。真实对不住了。

    [回复]

    619 回复:

    spam惯了,没事

    [回复]

    619 回复:

    那到底是c还是c++啊?

    [回复]

    Kada 回复:

    c++,这条评论还是悲剧的成spam了。我才发现。

    [回复]

  2. 嗯……这个有意思。

    [回复]

  3. 哈哈……我没有修改邮箱,难怪我的头像没有改变呢!

    [回复]

    Kada 回复:

    这个是小树藤吗?

    [回复]

  4. Kada兄太专业了,实在是看不懂。

    [回复]

    Kada 回复:

    谢谢兄的光临。

    [回复]

  5. 看我javasciript版

    ………

    ……..
    ..

    ..

    楼主可懂?

    [回复]

    Kada 回复:

    你指你的省略号?

    [回复]

  6. 有用,留起

    [回复]

  7. 這是你的學校作業嗎?

    [回复]

    Kada 回复:

    不是的。爱做些小题目,顺别更新下日志。

    [回复]

  8. 像个很复杂的编程

    [回复]

  9. 明就是元宵节了恭祝元宵快乐。。。

    [回复]

  10. 其实,我觉得这倒是更像数学游戏一样。

    [回复]

  11. 专业的东西,学习了。

    [回复]

  12. 好专业、不错的说!

    [回复]

  13. 元宵节了,来问候一下,元宵节快乐哈

    [回复]

  14. 有点晕…好久没看这个了

    [回复]

  15. 这个是编程吗?我也想学编程。。。不知道要什么样的学位呀!

    [回复]

    Kada 回复:

    少先队员就行了。

    [回复]

    星网 回复:

    囧,为啥说少先队员?

    [回复]

    Kada 回复:

    小学生么。

    [回复]

    星网 回复:

    啊?小学都可以呀?不是那么简单吧?我没有英语基础的。。。

    [回复]

    Kada 回复:

    今年计算机考研的题目,专业科目和数学。很多神人级的人物都是英语悲剧帝呢!

    [回复]

    星网 回复:

    囧,那到底我能不能学呀~!被你说的囧死了~!

    [回复]

    Kada 回复:

    能。怎么不能!

    [回复]

    星网 回复:

    难道不需要什么基础吗?总不能什么都不会就这样赶鸭子上架吧?

    [回复]

    Kada 回复:

    重最基础的开始呗!没什么困难的!认识简单的单词都够了。

    [回复]

    小树藤 回复:

    我再来加上一层吧!

    [回复]

    619 回复:

    得了吧!没有大学数学功底,学起c都很吃力的!就不用说什么c#、jave、.net了 ..
    哎,我是选错专业了!

    [回复]

    Kada 回复:

    你看你悲剧不悲剧。这么长的评论都当垃圾屏蔽了!不要吓人。普通的程序编制,根本用不到那些知识!要不然广大的计算机培训机构怎么招生!你看看各位博主哪位写程序的时候用了什么咯比大法则,夹逼定理,傅立叶函数,高阶矩阵,微积分什么的?!数学能力只是逻辑思考的一种体现。又不是设计什么复杂程序,也不是做ACM的题目,哪里要这么多东西。

    [回复]

    619 回复:

    哈哈,这么说来,我老6也算一软件工程师啰!

    [回复]

  16. 这个东西要是写出来 会用到哪里?

    [回复]

    Kada 回复:

    哦。这个是ACM程序竞赛的题目。被我分离出来了。一般都是有实际应用出处的。

    [回复]

  17. 看到数字,我就头晕!!!!

    [回复]

  18. 代码盲 来 了。

    [回复]

    Kada 回复:

    你是代码盲?

    [回复]

  19. 过来看看

    [回复]

    Kada 回复:

    正好撞见了。

    [回复]

  20. 看到了一个技术博客,过来瞅瞅,哈~

    [回复]

Add your comment now