1236: 数的逆转

题目描述

Birdfly是一位优秀的acmer,他自幼都数学有着浓烈的兴趣。作为一名集训队员,总爱思考一些新奇的问题,寻求不同的解题方法。
Birdfly一直坚信freshmen的潜力是无穷的!因为你们是ZZULI ACM的未来!ACM的题目并不是那么简单,但这一题so easy!^_^
一天晚上,birdfly躺在床上毫无睡意……他想,任意给你一个整数,这个数可能很大(最长不超过100位),你能求出它的逆转数吗?
逆转数定义如下:
1.一个末尾没有0的整数,它的逆转数就是各位数字逆序输出;
2.一个负数的逆转数仍是负数;
3.一个末尾有0的整数,它的逆转数如同下例:reverse (1200) = 2100。
看着birdfly难以入睡,我只好求助于聪明的你编程实现这个问题,相信你一定能帮上忙的!

输入

输入数组有多组, 每组测试实例包含一个大数且占一行。

输出

对每组测试实例,输出它的逆转数。每组占一行。

样例输入 Copy
0
54
-8989
-54600
100000
样例输出 Copy
0
45
-9898
-64500
100000
/*刚开始以为要用指针,后来发现可以不用*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
void reverse(char str[]) /*用函数判断更简洁*/
{  int min=0;   /*定义变量*/
    int i,len,count=0,flag=0;
    len=strlen(str);
    if(str[0]=='-') /*先判断第一位是不是负数*/
    {
        min=1;/*有“-”就把min变为1*/
        printf("-");/*负数还是负数*/
    }
    for(i=len-1;i>=1;i--)/*要逆转数,所以倒着找,另外str[0]因为可能是-,所以拎出来*/
    {  if(str[i]=='0'&&flag==0)/*如果倒数第一位是0,标记,跳过,同时count+1*/
        {
            count++;
            continue;
        } /*如果不是0或者是0但是0没有连续(比如1040,0之后是4,4不为0,输出,flag标记,
		4之后还是0,但是flag已不是0,所以不跳过,进入下一个if语句,这时虽然是0,但是flag不是0)
		  所以 还是直接输出*/
        if(str[i]!='0'||flag!=0)
        {
            printf("%c",str[i]);
            flag=1;
        }
    }
    if(min==0)/*min是0就代表没有-*/
            { /*接着输出最后一位str[0]*/
               printf("%c",str[0]);
            }
            for(i=1;i<=count;i++)/*最后再把0补充上去*/
              printf("0");
}
int main()
{
    char str[101];
    while(gets(str))
    {
		 reverse(str);
		printf("\n");
    }
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值