题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式
一个整数 N
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入 #1:123
输出 #1:321
输入 #2:-870
输出 #2:-78
答案
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int i;//定义脚标
char num[20];//定义要输入的数(可能存在负数,后续分情况讨论)
gets(num);//输入待逆序的数
i=strlen(num)-1;//将num长度赋给i(-1是为了和数组下标对应)
if (num[0]=='-')//首先讨论负数的情况
{
printf("-");//先打印一个负号
if (num[i]=='0'){//如果num的个位是0
while (num[i]=='0'){//注意这里,不是说个位是0,
i--; //就从十位开始打印,而是从第一个非0位开始打印
}//倒着找,直到找到第一个不为0的数
for (;i>0;i--)//开始逆序打印
{
printf("%c",num[i]);
}
}
else for (;i>0;i--)//若个位不为0,直接逆序输出
{
printf("%c",num[i]);
}
}
else {//再讨论正数情况,后续完全相同
if (num[i]=='0'){
while (num[i]=='0'){
i--;
}
for (;i>=0;i--)
{
printf("%c",num[i]);
}
}
else for (;i>=0;i--)
{
printf("%c",num[i]);
}
}
return 0;
}
本题应用了初等的精度思想,需要注意的点是:
字符串中的"数字"本质是字符而不是数字,比如判断末位是否为0,就要用=='0’而不是直接==0