
C语言或C++的 数学黑洞问题,我好像陷入了死循环。求帮忙
#include<iostream>#include<stdio.h>usingnamespacestd;intn;intp(intnum){inti,j,sum,x,t...
#include <iostream>
#include <stdio.h>
using namespace std;
int n;
int p(int num)
{
int i,j,sum,x,t;
int s[4];
/*
int a,b,c,d;
a=num/1000;
b=(num/100)%10;
c=(num/10)%10;
d=num%10;*/
s[0]=num/1000;
s[1]=(num/100)%10;
s[2]=(num/10)%10;
s[3]=num%10;
for(j=0;j<4;j++)
{
for(i=0;i<4-j;i++)
{
if(s[i]>s[i+1])
{
t=s[i];
s[j]=s[i+1];
s[i+1]=t;
}
}
}
sum=(s[3]*1000+s[2]*100+s[1]*10+s[0])-(s[0]*1000+s[1]*100+s[2]*10+s[3]);
return sum;
}
int main()
{
/*int a,b,c,d;
a=1234/1000;
b=(1234/100)%10;
c=(1234/10)%10;
d=1234%10;
cout<<a<<" "<<b<<" "<<c<<" "<<d;*/
int n1,temp=1;
cin>>n;
if(n!=6174)
{
n1=p(n);
while(n1!=6174)
{
n1=p(n1);
temp++;
}
cout<<temp;
}
else
cout<<1;
return 0;
} 展开
#include <stdio.h>
using namespace std;
int n;
int p(int num)
{
int i,j,sum,x,t;
int s[4];
/*
int a,b,c,d;
a=num/1000;
b=(num/100)%10;
c=(num/10)%10;
d=num%10;*/
s[0]=num/1000;
s[1]=(num/100)%10;
s[2]=(num/10)%10;
s[3]=num%10;
for(j=0;j<4;j++)
{
for(i=0;i<4-j;i++)
{
if(s[i]>s[i+1])
{
t=s[i];
s[j]=s[i+1];
s[i+1]=t;
}
}
}
sum=(s[3]*1000+s[2]*100+s[1]*10+s[0])-(s[0]*1000+s[1]*100+s[2]*10+s[3]);
return sum;
}
int main()
{
/*int a,b,c,d;
a=1234/1000;
b=(1234/100)%10;
c=(1234/10)%10;
d=1234%10;
cout<<a<<" "<<b<<" "<<c<<" "<<d;*/
int n1,temp=1;
cin>>n;
if(n!=6174)
{
n1=p(n);
while(n1!=6174)
{
n1=p(n1);
temp++;
}
cout<<temp;
}
else
cout<<1;
return 0;
} 展开
2个回答
展开全部
当J=0时,第二个for语句中的i<4-j也就是i<4,i++,这样的话i最大可以达到3
而在下面的语句中有个S[i+1]也就是S[4],这意味着数组的长度是5个,而你只定义了4的长度
数组长度溢出了
而且那个前后调换的函数貌似也有问题
应该是s[i]=s[i+1]而不是s[j]=s[i+1]
i 和 j 打错了是不是
而在下面的语句中有个S[i+1]也就是S[4],这意味着数组的长度是5个,而你只定义了4的长度
数组长度溢出了
而且那个前后调换的函数貌似也有问题
应该是s[i]=s[i+1]而不是s[j]=s[i+1]
i 和 j 打错了是不是
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询