1. 程式人生 > >7-42 逆序的三位數(C語言版)

7-42 逆序的三位數(C語言版)

7-42 逆序的三位數 (10 分) 程式每次讀入一個正3位數,然後輸出按位逆序的數字。注意:當輸入的數字含有結尾的0時,輸出不應帶有前導的0。比如輸入700,輸出應該是7。

輸入格式: 每個測試是一個3位的正整數。

輸出格式: 輸出按位逆序的數。

輸入樣例: 123 輸出樣例: 321

參考程式碼

#include<stdio.h>
int main()
{
	int n,a,b,c,sum=0;
	scanf("%d",&n);
	a=n/100;//百位
	b=n%10;//個位
	c=(n/10)%10;//十位
	sum=b*100+c*10+a;
	printf("%d",sum); 
	return 0;
 }

注:這道題其實很簡單,之所以會寫這道題。是因為我寫類似的逆序題目程式時忽略一個小細節,導致程式出錯,之前總感覺要求一個整數的所有位的數太麻煩,所以我就定義一個字串,將字串逆序輸出,只要判斷字串首位不為零即可輸出,如下程式碼:

錯誤程式碼

#include<stdio.h>
int main()
{
	char s[5];
	int len,i;
	gets(s);
	len=strlen(s);
	for(i=len-1;i>=0;i--)
	{
		if(s[i]=='0'&&i==len-1)
		{
			continue;
		}
		else
		{
			printf("%c",s[i]);
		}
	}
	return 0;
 }

這個程式碼只可將最末尾的0去除,如果一個三位數末尾有兩個0,比如200 那結局就比較尷尬了,如果想要正確,還需新增其它的判斷語句(如果是個多位數,那情況就會更復雜,整數中間的零和整數末尾的零區別,輸出),務必會浪費許多時間,還不如用整數位上的數來計算,來的痛快呢!所以這個細節自己應該銘記,現在寫出來,以防自己忘記! 如果要求多位數的逆序,可以參考第一種的方法,運用遞迴函式實現。 加油!