c語言實戰 逆序一個三位數
阿新 • • 發佈:2018-09-07
輸出 解決 似的 等於 怎麽 情況 兩個 位數 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語言實戰 逆序一個三位數