二
24
数字的反转数:一个数,将其首尾倒置。例如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;
}
#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,转载请注明出处。

这是c还是c++?
[回复]
Kada 回复:
二月 26th, 2010 at 10:59 上午
兄的沙发居然被当作垃圾评论了,我才发现。真实对不住了。
[回复]
619 回复:
二月 26th, 2010 at 5:08 下午
spam惯了,没事
[回复]
619 回复:
三月 6th, 2010 at 7:57 下午
那到底是c还是c++啊?
[回复]
Kada 回复:
三月 8th, 2010 at 10:09 下午
c++,这条评论还是悲剧的成spam了。我才发现。
[回复]
嗯……这个有意思。
[回复]
哈哈……我没有修改邮箱,难怪我的头像没有改变呢!
[回复]
Kada 回复:
二月 25th, 2010 at 4:55 下午
这个是小树藤吗?
[回复]
Kada兄太专业了,实在是看不懂。
[回复]
Kada 回复:
二月 25th, 2010 at 4:56 下午
谢谢兄的光临。
[回复]
看我javasciript版
………
……..
..
..
楼主可懂?
[回复]
Kada 回复:
二月 26th, 2010 at 9:28 上午
你指你的省略号?
[回复]
有用,留起
[回复]
這是你的學校作業嗎?
[回复]
Kada 回复:
二月 26th, 2010 at 10:06 下午
不是的。爱做些小题目,顺别更新下日志。
[回复]
像个很复杂的编程
[回复]
明就是元宵节了恭祝元宵快乐。。。
[回复]
其实,我觉得这倒是更像数学游戏一样。
[回复]
专业的东西,学习了。
[回复]
好专业、不错的说!
[回复]
元宵节了,来问候一下,元宵节快乐哈
[回复]
有点晕…好久没看这个了
[回复]
这个是编程吗?我也想学编程。。。不知道要什么样的学位呀!
[回复]
Kada 回复:
三月 1st, 2010 at 9:18 下午
少先队员就行了。
[回复]
星网 回复:
三月 1st, 2010 at 9:30 下午
囧,为啥说少先队员?
[回复]
Kada 回复:
三月 1st, 2010 at 9:35 下午
小学生么。
[回复]
星网 回复:
三月 1st, 2010 at 9:37 下午
啊?小学都可以呀?不是那么简单吧?我没有英语基础的。。。
[回复]
Kada 回复:
三月 1st, 2010 at 10:10 下午
今年计算机考研的题目,专业科目和数学。很多神人级的人物都是英语悲剧帝呢!
[回复]
星网 回复:
三月 1st, 2010 at 10:22 下午
囧,那到底我能不能学呀~!被你说的囧死了~!
[回复]
Kada 回复:
三月 1st, 2010 at 10:25 下午
能。怎么不能!
[回复]
星网 回复:
三月 1st, 2010 at 10:27 下午
难道不需要什么基础吗?总不能什么都不会就这样赶鸭子上架吧?
[回复]
Kada 回复:
三月 1st, 2010 at 10:29 下午
重最基础的开始呗!没什么困难的!认识简单的单词都够了。
[回复]
小树藤 回复:
三月 2nd, 2010 at 10:44 下午
我再来加上一层吧!
[回复]
619 回复:
三月 6th, 2010 at 7:58 下午
得了吧!没有大学数学功底,学起c都很吃力的!就不用说什么c#、jave、.net了 ..
哎,我是选错专业了!
[回复]
Kada 回复:
三月 8th, 2010 at 10:15 下午
你看你悲剧不悲剧。这么长的评论都当垃圾屏蔽了!不要吓人。普通的程序编制,根本用不到那些知识!要不然广大的计算机培训机构怎么招生!你看看各位博主哪位写程序的时候用了什么咯比大法则,夹逼定理,傅立叶函数,高阶矩阵,微积分什么的?!数学能力只是逻辑思考的一种体现。又不是设计什么复杂程序,也不是做ACM的题目,哪里要这么多东西。
[回复]
619 回复:
三月 10th, 2010 at 10:53 下午
哈哈,这么说来,我老6也算一软件工程师啰!
[回复]
这个东西要是写出来 会用到哪里?
[回复]
Kada 回复:
三月 3rd, 2010 at 4:58 下午
哦。这个是ACM程序竞赛的题目。被我分离出来了。一般都是有实际应用出处的。
[回复]
看到数字,我就头晕!!!!
[回复]
代码盲 来 了。
[回复]
Kada 回复:
三月 5th, 2010 at 11:48 上午
你是代码盲?
[回复]
过来看看
[回复]
Kada 回复:
三月 5th, 2010 at 11:06 下午
正好撞见了。
[回复]
看到了一个技术博客,过来瞅瞅,哈~
[回复]