1. 程式人生 > >c語言實戰 逆序一個三位數

c語言實戰 逆序一個三位數

輸出 解決 似的 等於 怎麽 情況 兩個 位數 light

題目:給定一個正的三位整數,比如123,輸出321,但如果是700,輸出必須是7不能是007

思路是怎麽樣的呢?

假設這個正三位數是m,它的百分位是c,十分位是b,個位是a,那麽就存在下面的等式。

m=c*100+b*10+a*1

現在已知了m,只要知道c、b、a這三個數的值,那麽我們直接按abc的順序輸出不就給逆序了嗎?

那麽怎麽知道這三個數的值呢?

首先c是最好求的

c=m/100 //整除的結果就是百位數

利用相似的思路b的值也比較好求。

b=(m%100)/10  //m對100取余之後剩下的就是十位數和個位數的和,和在整除10就是十位數了。

一個等式三個未知數,知道了其中兩個,那麽第三個就知道了。

a=m-c*100-b*10

恩,解決了啊,寫程序。

    int m = 0;
    int a = 0;
    int b = 0;
    int c = 0;

    scanf_s("%d",&m);

    c = m / 100;
    b = (m % 100) / 10;
    a = m - (c*100)-(b*10);

    printf("%d%d%d",a,b,c);

運行之後,發現沒有什麽大問題,只是針對700這種情況,輸出的還是007,怎麽辦?怎麽辦,很急,我一開始還想利用字符輸出的,程序崩潰了,沒成功。後來一想,既然已經知道了三個位置的數值了,那麽直接三個位置的數加一下就行了嘛,反正結果沒變,比如輸入700,那麽c等於7 b等於0 a等於0,那麽逆序之後的這個數不就是0*100+b*10+c*1,那麽結果不就是7嘛,

最後改成這樣就可以了。

        int m = 0;
	int a = 0;
	int b = 0;
	int c = 0;

	scanf_s("%d",&m);

	c = m / 100;
	b = (m % 100) / 10;
	a = m - (c*100)-(b*10);

	printf("%d",a*100+b*10+c);        

  

c語言實戰 逆序一個三位數