洛谷题解 P1307 【数字反转】

这道题目还是属于比较简单的类型,所以我还做得下去QAQ

这题的思路(个人观点):

  1. 输入一个字符串,判断负号
  2. 去除末尾的0
  3. 逆序输出

哎哟,挺简单的qwq

接下来是重点!!!

用while输入字符串!

定义一个num(char),len(int)
先输入num[0],判断ASCII码是否≥32 && ≤126(处于可见字符范围内)
用while重复上一步
最后len–!!!(因为最后一个字符是回车)

好,上代码

#include<iostream>                             //不解释 
using namespace std;
int main()
{
	char num[1001];                            //num就是输入的数字 
	int len=0;                                 //数字长度 
	bool no=false,temp=false;                  //no是从右往左数有没有出现第一个非零数,temp是有无负号 
	
	num[0]=getchar();                          //这串代码上面解释 
	while(num[len]>=32 && num[len]<=126)
		num[++len]=getchar();
	len--;
	
	if(num[0]=='-')                            //如果第一个符号是负号 
		putchar('-'),temp=true;                //输出符号并将temp设定成true(真) 
	for(int i=len;i>=0;i--)                    //除去末尾的0 
	{
		if(num[i]=='0' && no==false)           //如果有零并且没遇到第一个非零数 
			len--;                             //长度-1(这样就可以不输出) 
		if(num[i]!='0')                        //一旦遇到第一个非零数 
		{
			no=true;                           //可省略 
			break;                             //跳出循环 
		}
	}
	
	for(int i=len;i>=0;i--)                    //逆序输出 
	{
		if(i!=0 || (i==0 && temp==0))          //如果i!=0或者无符号 
			putchar(num[i]);                   //输出 
	}
	
	return 0;
}
posted @ 2020-03-17 10:11  榴恋666  阅读(119)  评论(0编辑  收藏  举报