C++编程: 神秘数问题

取任何一个4位数(4个数字均为同一个数字的例外),将组成该数的4个数字重新组合成可能的最大数和可能的最小数,再将两者的差求出来;对此差值重复同样的过程(例如:开始时取数8... 取任何一个4位数(4个数字均为同一个数字的例外),将组成该数的4个数字重新组合成可能的最大数和可能的最小数,再将两者的差求出来;对此差值重复同样的过程(例如:开始时取数8028,最大的重新组合数为8820,最小的为0288,二者的差8532。重复上述过程得出8532-2358=6174),最后总是达到一个神秘的数,请编程求出这个神秘的数。 我编的程序错了但不知道该怎么改。求错误原因及解法。

#include <iostream>
using namespace std;
int main ()
{
int N,b,c,i,j,m,x;
char a[4];
cout<<"请输入一个4位数(4个数字均为同一个数字的例外):"<<endl;
cin>>a;
x=1000*a[0]+100*a[1]+10*a[2]+a[3];
do
{
N=x;
a[0]=N/1000;
a[1]=(N-1000*a[0])/100;
a[2]=(N-1000*a[0]-100*a[1])/10;
a[3]=N-1000*a[0]-100*a[1]-10*a[2];
for(i=0;i<3;i++)
{
for(j=0;j<3-i;j++)
{
if(a[j]<a[j+1])
{
m=a[j];
a[j]=a[j+1];
a[j+1]=m;
}
}
}
b=a[0]*1000+a[1]*100+a[2]*10+a[3];
c=a[3]*1000+a[2]*100+a[1]*10+a[0];
x=b-c;
}
while(x!=N);
cout<<"神秘数是:"<<x<<endl;
return 0;
}
展开
 我来答
阔气克克
2014-06-10 · TA获得超过484个赞
知道小有建树答主
回答量:527
采纳率:0%
帮助的人:460万
展开全部
下面循环都没有错,但是你a数组声明的可是char a[4]啊,那用cin读入进来的可都是char型的数据啊,你在那里乘1000什么都都是在对char的ASCII码操作,数据肯定是不对的啊。
然后循环里还在用这个char型的数组当作整型用,显然是不对的。
把声明那部分改成这样:
int N,b,c,i,j,m,x;
int a[4]; //把循环的数组声明为int
char input[4];//用char型数组专门接收键盘输入
cout<<"请输入一个4位数(4个数字均为同一个数字的例外):"<<endl;
cin>>input;
x=1000*(input[0]-'0')+100*(input[1]-'0')+10*(input[2]-'0')+(input[3]-'0');
//这里把每一位减去‘0’得到对应的整型

希望你能这么改的原因。至于神秘数,等于6174
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水城4m
2014-06-10 · TA获得超过3060个赞
知道大有可为答主
回答量:2938
采纳率:50%
帮助的人:931万
展开全部
x=1000*a[0]+100*a[1]+10*a[2]+a[3];
改成 x=1000*(a[0]-'0')+100*(a[1]-'0')+10*(a[2]-'0')+(a[3]-'0');

#include "conio.h"
#include <iostream>
using namespace std;
int test ()
{
int N,b,c,i,j,m,x;
char a[4];
cout<<"请输入一个4位数(4个数字均为同一个数字的例外):"<<endl;
cin>>a;
//x=1000*a[0]+100*a[1]+10*a[2]+a[3];
x = 1000 * (a[0]-'0') + 100 * (a[1] - '0') + 10 * (a[2] - '0') + (a[3] - '0');
do
{
N=x;
a[0]=N/1000;
a[1]=(N-1000*a[0])/100;
a[2]=(N-1000*a[0]-100*a[1])/10;
a[3]=N-1000*a[0]-100*a[1]-10*a[2];
for(i=0;i<3;i++)
{
for(j=0;j<3-i;j++)
{
if(a[j]<a[j+1])
{
m=a[j];
a[j]=a[j+1];
a[j+1]=m;
}
}
}
b=a[0]*1000+a[1]*100+a[2]*10+a[3];
c=a[3]*1000+a[2]*100+a[1]*10+a[0];
x=b-c;
}
while(x!=N);
cout<<"神秘数是:"<<x<<endl;
return 0;
}
int main()
{
do
{
if(test())
{
return 1;
}
printf("intput 'y' to exit: ");
_flushall();
}
while(_getch() != 'y');

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
porker2008
2014-06-10 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
#include <iostream>
using namespace std;
int main()
{
int N, b, c, i, j, m, x;
int a[4];
cout << "请输入一个4位数(4个数字均为同一个数字的例外):" << endl;
cin >> x;
do
{
N = x;
a[0] = N / 1000;
a[1] = (N - 1000 * a[0]) / 100;
a[2] = (N - 1000 * a[0] - 100 * a[1]) / 10;
a[3] = N - 1000 * a[0] - 100 * a[1] - 10 * a[2];
for (i = 0; i<3; i++)
{
for (j = 0; j<3 - i; j++)
{
if (a[j]<a[j + 1])
{
m = a[j];
a[j] = a[j + 1];
a[j + 1] = m;
}
}
}
b = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
c = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];
x = b - c;
} while (x != N);
cout << "神秘数是:" << x << endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaobomo
2014-06-10 · TA获得超过522个赞
知道小有建树答主
回答量:533
采纳率:100%
帮助的人:357万
展开全部
#include <iostream>
using namespace std;
int main ()
{
int N,b,c,i,j,m,x;
char a[5];
cout<<"请输入一个4位数(4个数字均为同一个数字的例外):"<<endl;
cin>>a;
a[4]='\0';
x=1000*(a[0]-'0')+100*(a[1]-'0')+10*(a[2]-'0')+(a[3]-'0');
do
{
N=x;
a[0]=N/1000;
a[1]=(N-1000*a[0])/100;
a[2]=(N-1000*a[0]-100*a[1])/10;
a[3]=N-1000*a[0]-100*a[1]-10*a[2];
for(i=0;i<3;i++)
{
for(j=0;j<3-i;j++)
{
if(a[j]<a[j+1])
{
m=a[j];
a[j]=a[j+1];
a[j+1]=m;
}
}
}
b=a[0]*1000+a[1]*100+a[2]*10+a[3];
c=a[3]*1000+a[2]*100+a[1]*10+a[0];
x=b-c;
}
while(x!=N);
cout<<"神秘数是:"<<x<<endl;
return 0;
}

答案是6174

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晨不起
2014-06-10 · 超过15用户采纳过TA的回答
知道答主
回答量:64
采纳率:50%
帮助的人:31.8万
展开全部
x=1000*a[0]+100*a[1]+10*a[2]+a[3];错了,注意数组a是字符类型,而x是整形!在把数组a转换成整数的时候注意减掉'0'。采纳,谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式