當前位置:係統粉 > 電腦問答 > 其他問答 > 我是初學者,準備寫一個磁力數的程序

我是初學者,準備寫一個磁力數的程序

提問者:街角の風鈴°  |  瀏覽 次  |  提問時間:2017-02-02  |  回答數量:4

我是初學者,準備寫一個磁力數的程序 磁力數:任意給一個三位數,數碼不要完全相同,然後分別按照從大到小和從小到大的順序將三個數碼重新排列,組成一大一小兩數,大數減去小數得到差數(若差數的數碼少於三位,則前麵添0補足到三位);再將差數的數碼按照前法重新組成一大一小兩數,相減得到新的差數。這樣反複做下去,最後總是能得到495,而且將495按前法處理得到的新的差數仍是495。495就是三位數中的磁力數。任意給一個四位數,數碼不要完全相同,按照上述方法處理,最後總是能得到6174,而且將6174按前法重新處理得到的新數仍是6174。6174就是四位數中的磁力數。我是初學者,學的是c++,準備寫一個磁力數的程序,自己寫了半天,有好多功能不能實現。比如1112,從小往大排和從大往小排的差值為999。這就需要在999前麵加一個0。還有求得磁力數的時候退出,我也弄的不好。請大家幫忙!下麵是我自己寫的。#include<iostream>#include<math.h>#include<stdlib.h>int cilishu(int a);int main(){  using namespace st

已有4條答案
吃兔子的蘿卜c

吃兔子的蘿卜c

回答數:94  |  被采納數:4

2017-02-02 11:39:10
0999的方法:
cout<<"兩者的差值為:"<<endl;
char str[256];
char fmt[10];
sprintf(fmt,"%%0%dd",digits);
sprintf(str,fmt,cha);
cout<<str<<endl;
讚 9
一域寒冰

一域寒冰

回答數:64  |  被采納數:1

2017-02-02 11:31:59
很有意思的題目,如果不用字符串的轉換的話,就這樣做吧:
#include <iostream>#include <cmath>using namespace std;int Check_Number(int);int Find_Max(int, int);int Find_Min(int, int);int main(){int check = 0;cout<<"Input a number to check:"<<endl;cin>>check;int result = Check_Number(check);cout<<"Result = "<<result<<endl;return 0;}int Check_Number(int test){int n = 0;int max = 0;int min = 0;int diff = -1;int last_time = 0;int temp = test;while(temp){ n++; temp/=10;}while(diff != last_time){ last_time = diff; max = Find_Max(test, n); min = Find_Min(test, n); diff = max - min; test = diff;}return diff;}int Find_Max(int test, int n){int max = 0;int *a = new int[n];int loop = n;while (loop--){ a[loop] = test%10; test/=10;}for(int i = 0; i < n-1; i++){ for(int j = i+1; j < n; j++) { if(a[i] < a[j]) { a[i] = a[i]^a[j]; a[j] = a[i]^a[j]; a[i] = a[i]^a[j]; } }}for(i = 0; i < n; i++){ a[i] = a[i] * (int)pow(10, n-i-1); max += a[i];}//delete [n]a;return max;}int Find_Min(int test, int n){int min = 0;int *a = new int[n];int loop = n;while (loop--){ a[loop] = test%10; test/=10;}for(int i = 0; i < n-1; i++){ for(int j = i+1; j < n; j++) { if(a[i] > a[j]) { a[i] = a[i]^a[j]; a[j] = a[i]^a[j]; a[i] = a[i]^a[j]; } }}for(i = 0; i < n; i++){ a[i] = a[i] * (int)pow(10, n-i-1); min += a[i];}//delete [n]a;return min;}複製代碼
讚 6
終究成了過去

終究成了過去

回答數:157  |  被采納數:72

2017-02-02 11:02:04
對了,記得把上麵的代碼那個delete [n]a;前麵的2個斜線去掉,可以節省內存,剛剛急著寫忘記了……[s:468]
讚 15
血之殤月

血之殤月

回答數:6  |  被采納數:84

2017-02-02 18:13:31
謝謝了,我得好好看看。不是一會能看懂的~
讚 0
解決方法
版權信息

Copyright @ 2011 係統粉 版權聲明 最新發布內容 網站導航