数字反转解法

# [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;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值