user-0 提问: C语言新手  数据逆序显示问题，不清楚思路

回复:
user: user-1
content: #include <iostream.h> #include <windows.h>  void main() { 	char in ; 	char data[200]; 	memset(data,0,200);//初始化数组，所有元素置零 	int count = 0; 	while(cin>>in) 	{ 		data[count] = in; 		count ++; 	}  	if ('0' != data[count - 1])//最后一位不为0，就所有输出 	{ 		for (int i = count - 1;i >= 0;i --) 		{ 			cout<<data[i]; 		} 		cout<<endl; 	} 	else//最后一位为0就从倒数第二个输出 	{ 		for (int i = count -2;i >= 0;i --) 		{ 			cout<<data[i]; 		} 		cout<<endl; 	} }  输入结束时，回车然后CTRL+Z

user: user-2
content: 引用 5 楼 cyuyanxiaowangzi 的回复:第二种的答案真的是看不懂额，i与j大小的比较是为了什么？ 不一定要像他那样写。你可以先这样写 比如，你输入了21. 1、int i = 21/10( = 2------------------提取出了十位) 2、int j = 21%10(=1-----------------提取出了个位） 你再把i和j组合在一起j = j*10+i = 12(或者你直接先输出j,在输出i也可以。) 当然你仔细琢磨一下你贴出的代码，看看他怎么写的就更好了！

user: user-3
content: 输入的用字符串存储，然后逆序过来跳过前面的0不要输出。

user: user-0
content: 第二种的答案真的是看不懂额，i与j大小的比较是为了什么？

user: user-2
content: 引用 2 楼 cyuyanxiaowangzi 的回复:int x,a,b,i,j=0; 	scanf("%d",&x); 	a=x; 	while(a>10) 	{ 		a/=10; 		j++; 	} 	j++; 	for(i=1;i<=j;i++) 	{ 		if(x%10==0) 		{ 			x=x/10; 			j--; 		} 	} 	for(i=1;i<=j;i++) 	{ 		b=x%10; 		printf("%d",b); 		x/=10;    答案是这样的，看起来不像第一种，也不像第二种，就是看不懂答案 你的答案是第二种！

user: user-2
content: 给你第一种答案： #include<stdio.h> #include <stdlib.h> #include<string.h> int main() { 	int input; 	char temp[32] = {'\0'}; 	printf("输入一个正整数："); 	scanf("%d",&input); 	itoa(input, temp, 10); 	int count = strlen(temp); 	for(int i = count -1;i>=0;i--) 	{ 		if(temp[i]!='0') 			printf("%c",temp[i]); 	} }

user: user-0
content: int x,a,b,i,j=0; 	scanf("%d",&x); 	a=x; 	while(a>10) 	{ 		a/=10; 		j++; 	} 	j++; 	for(i=1;i<=j;i++) 	{ 		if(x%10==0) 		{ 			x=x/10; 			j--; 		} 	} 	for(i=1;i<=j;i++) 	{ 		b=x%10; 		printf("%d",b); 		x/=10;    答案是这样的，看起来不像第一种，也不像第二种，就是看不懂答案

user: user-2
content: 第一种：将输入转化为char字符串，然后将字符串作为数组处理，从后往前输出 第二种：将输入分解成不同的位（个位十位百位。。。。。。）然后倒着输出每一位 。。。。。。

user: user-4
content: 仅供参考 #include<stdio.h> #include<string.h> #include<stdlib.h>  int main() { 		char buffer[20]; 		int n,len; 		int state = 0; 		scanf("%d",&n); 		while( 0 == n%10) 		{ 				n = n / 10; 		} 		sprintf(buffer,"%d",n);  		len = strlen(buffer); 		for(int i = 1; i <= len; ++i) 			{ 					printf("%c",buffer[len -i]); 			} 		printf("\n"); 		exit(0); }z

user: user-2
content: 引用 9 楼 jianwen0529 的回复:[quote=引用 3 楼 baijiaheizhiganmao 的回复:] 给你第一种答案： #include<stdio.h> #include <stdlib.h> #include<string.h> int main() { 	int input; 	char temp[32] = {'\0'}; 	printf("输入一个正整数："); 	scanf("%d",&input); 	itoa(input, temp, 10); 	int count = strlen(temp); 	for(int i = count -1;i>=0;i--) 	{ 		if(temp[i]!='0') 			printf("%c",temp[i]); 	} }  逻辑错了，应该是最后连续N位（如340的最后一位，3400最后的两位）不为‘0’则不显示，你的把中间0也忽略了！[/quote] 你是对的！没有考虑到这种情况！ #include<stdio.h> #include <stdlib.h> #include<string.h> int main() { 	int input; 	bool targ=false; 	char temp[32] = {'\0'}; 	printf("输入一个正整数："); 	scanf("%d",&input); 	itoa(input, temp, 10); 	int count = strlen(temp); 	for(int i = count -1;i>=0;i--) 	{ 		if(!targ) 		{ 			if(	temp[i]!='0') 			{ 				printf("%c",temp[i]); 				targ = true; 			} 		} 		else 			printf("%c",temp[i]); 	} 	return 0; } 这下没错了！

user: user-5
content: 引用 3 楼 baijiaheizhiganmao 的回复:给你第一种答案： #include<stdio.h> #include <stdlib.h> #include<string.h> int main() { 	int input; 	char temp[32] = {'\0'}; 	printf("输入一个正整数："); 	scanf("%d",&input); 	itoa(input, temp, 10); 	int count = strlen(temp); 	for(int i = count -1;i>=0;i--) 	{ 		if(temp[i]!='0') 			printf("%c",temp[i]); 	} }  逻辑错了，应该是最后连续N位（如340的最后一位，3400最后的两位）不为‘0’则不显示，你的把中间0也忽略了！