首页 > ACM题库 > 九度OJ > 九度-1089-数字反转[解题代码]
2013
12-12

九度-1089-数字反转[解题代码]

题目来源:2005年上海交通大学计算机研究生机试真题

题目描述:

    12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转。

输入:

    第一行一个正整数表示测试数据的个数n。
    只有n行,每行两个正整数a和b(0<a,b<=10000)。

输出:

    如果满足题目的要求输出a+b的值,否则输出NO。

样例输入:
2
12 34
99 1
样例输出:
46
NO

cpp 代码如下:
main(){
int i,p,j,q,a,b,n,c[6],d[6];
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&b);
p=a;
i=0;
while(p){c[i++]=p%10;
p/=10;}
for(j=0;j<i;j++)p=10*p+c[j];
 
q=b;
i=0;
while(q){d[i++]=q%10;
q/=10;}
for(j=0;j<i;j++)q=10*q+d[j];
p=p+q;
q=p;
i=0;
while(q){d[i++]=q%10;
q/=10;}
for(j=0;j<i;j++)q=10*q+d[j];
if(q==a+b)printf("%d\n",q);
else printf("NO\n");
}
 
 
}
/**************************************************************
	Problem: 1089
	User: coder
	Language: C
	Result: Accepted
	Time:0 ms
	Memory:912 kb
****************************************************************/


  1. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。

  2. 第23行:
    hash = -1是否应该改成hash[s ] = -1

    因为是要把从字符串s的start位到当前位在hash中重置

    修改提交后能accept,但是不修改居然也能accept

  3. 第一题是不是可以这样想,生了n孩子的家庭等价于n个家庭各生了一个1个孩子,这样最后男女的比例还是1:1

  4. 算法是程序的灵魂,算法分简单和复杂,如果不搞大数据类,程序员了解一下简单点的算法也是可以的,但是会算法的一定要会编程才行,程序员不一定要会算法,利于自己项目需要的可以简单了解。