【題意簡述】:6174問題,就是輸入一個四位數,將數字從大到小的排序結果,減去從小到大的排序結果,得到的結果再重復上述操作!直到得到的值是0,或者6174,便結束!(其中還有一些細小的敘述,參見題目。)
【思路】:沒有難度,思路很好建立,最重要的是看懂題意,按照題意要求控制輸入輸出,我就栽在這裡了,因為沒有注意一定要輸入四位,導致我一直OLE。
還有就是,在這裡邊有的語言知識就是sprintf,和printf不同之處就是printf是將內容輸出至顯示器,而sprintf是將內容輸出到字符串中,sscanf同理,我就不再贅述,詳細的可以看看語法書。
詳見代碼:
// 236K 0Ms #includeusing namespace std; #include #include int a,b; int get_next(int x) { int n; char s[10]; sprintf(s, "%d", x); n = strlen(s); //冒泡排序! for(int i = 0; i < n; i++) for(int j = i+1; j < n; j++) if(s[i] > s[j]) { char t = s[i]; s[i] = s[j]; s[j] = t; } sscanf(s, "%d", &b);//將得到的結果轉化為整型後儲存在b中! // 反轉! for(int i = 0; i < n/2; i++) { char t = s[i]; s[i] = s[n-1-i]; s[n-1-i] = t; } sscanf(s, "%d", &a); return a - b; } int main() { int n,t; int count; while(cin>>n) { if(n == -1) break; count = 1; cout<<"N="< 9999||n<1000) //!!注意這裡輸入必須是4位,否則就會 OLE!! { cout<<"No!!"<