# [NOIP2011 普及组] 数字反转
## 题目描述
给定一个整数 $N$,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
## 输入格式
一个整数 $N$。
## 输出格式
一个整数,表示反转后的新数。
## 样例 #1
### 样例输入 #1
```
123
```
### 样例输出 #1
```
321
```
## 样例 #2
### 样例输入 #2
```
-380
```
### 样例输出 #2
```
-83
```
## 提示
**【数据范围】**
$-1,000,000,000\leq N\leq 1,000,000,000 $。
noip2011 普及组第一题
首先,这可能输入的是一个很大的数,取值范围可能已经超过long long int, 所以选择使用字符型的数组来输入他,输入他以后,应该将这个数组反向输入到另外一个数组中去,这是,第一个问题就出现了, 这个反转数字要求首位数字不可以为0, 因此要确定开始反向循环开始的序数, 可以使用while循环,当数字不等于'0'与'\0'时推出循环,当然前提是已经将第一个可能是'-'给提取到另一个数组的第一位, 然后反向输入就可以了。(在输入数组时,动态输入系数(h)真的很好用),具体代码如下:
#include<stdio.h>
int main()
{
long long int k, j = 11, h = 0;
char b[13] = {0, 0}, c[13] = {0};
scanf("%s", c);
if(c[0] == '0' && c[1] == '\0') printf("0");
else{
if (c[0] == '-') b[0] = c[h ++];
while (c[j] == '\0' || c[j] == '0') //在字符数组中,未赋值的数不是0, 而是'\0'
j --;
for (k = j; k >= 0; k --)
{
if(c[k] != '-') b[h ++] = c[k];
}
printf("%s\n", b);
return 0;
}
}