本文主要是介绍HDU 1266,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天写了基础题,是关于整型数翻转的,虽然不难,但是看到杭电讨论版块一些人说要注意前导0的错误说法,所以打算写一篇博客说明一下。(如果我说错了,请大家批评指正!)
首先这道题不存在有前导0的问题,因为题目给出了各种情况下的翻转方法,其中并没有说明如何处理前导0,所以如果题目和测试数据是严谨的话,就不该出现这种没有说明处理方法的特殊情况。实际上我的代码没有处理前导0,而且出现前导0的话,我的程序也不能得到像讨论版块中那样的前导0的处理结果,但也AC了,所以这道题无需处理前导0。
然后谈谈我的思路。我用了字符数组来保存输入的数据,所以整数翻转就是一个局部(例如:1200)或全体(例如:12)倒序输出的问题。要注意的是程序在找后导0时要从最后一位向前找,如果从前往后找就要考虑如何处理中间的0(例如:908900),不过那样貌似挺麻烦的!其他的应该没有特别需要指出注意的,大家都能想到。
代码(G++):
#include <cstdlib>
#include <iostream>
#define MAX 20using namespace std;int main(int argc, char *argv[])
{int n,i,digit,start,end; //start标记了第一个'0'或'\0'的位置,end标记了第一个数字的位置 char number[MAX];cin>>n;while(n--){cin>>number;start=end=0;if('-'==number[0]){cout<<'-';end++;} while(number[start]!='\0') start++; //找到字符串的末尾 while(start-1>=0&&'0'==number[start-1]) start--; //找到后导0的第一位 if(start!=end){for(i=start-1;i>=end;i--) cout<<number[i]; //倒序输出数字 }while(number[start]!='\0') //输出可能存在的'0' {cout<<number[start];start++; }cout<<endl; }system("PAUSE");return EXIT_SUCCESS;
}
附上原题:
Reverse Number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Specially, I give my best regards to all freshmen! You are the future of HDU ACM! And now, I must tell you that ACM problems are always not so easy, but, except this one... Ha-Ha!
Give you an integer; your task is to output its reverse number. Here, reverse number is defined as follows:
1. The reverse number of a positive integer ending without 0 is general reverse, for example, reverse (12) = 21;
2. The reverse number of a negative integer is negative, for example, reverse (-12) = -21;
3. The reverse number of an integer ending with 0 is described as example, reverse (1200) = 2100.
3 12 -12 1200
21 -21 2100
这篇关于HDU 1266的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!