題目:給定一個正的三位整數,比如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);
2018.9.13更新
溫故而知新,又寫了一遍。
int main() { //用來保存用戶輸入的數據 int input = 0; //用來保存提取出來的三個位置的數據 int gewei = 0; int shiwei = 0; int baiwei = 0; //用來保存最后輸出的那個三位數 int output = 0; scanf_s("%d",&input); gewei = input % 10; shiwei = (input % 100) / 10; baiwei = input / 100; output = gewei * 100 + shiwei * 10 + baiwei * 1; printf("%d",output); }