系统粉 > 电脑问答 > 其他问答

已解决我是初学者,准备写一个磁力数的程序

提问者:街角の风铃°  |  浏览次  |  提问时间: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

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

一域寒冰

回答数:64  |  被采纳数:1

很有意思的题目,如果不用字符串的转换的话,就这样做吧:
#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;}复制代码
2017-02-02 11:31:59
赞 6
终究成了过去

终究成了过去

回答数:157  |  被采纳数:72

对了,记得把上面的代码那个delete [n]a;前面的2个斜线去掉,可以节省内存,刚刚急着写忘记了……[s:468]
2017-02-02 11:02:04
赞 15
血之殇月

血之殇月

回答数:6  |  被采纳数:84

谢谢了,我得好好看看。不是一会能看懂的~
2017-02-02 18:13:31
赞 0
相关问答
最新其他问答
解决方法