您的位置:首页 > 编程语言 > C语言/C++

C/C++卡布列克运算验证

2016-06-07 20:56 459 查看
#include<iostream>
using namespace std;
int main(void)
{
int sortmax(int);
int sortmin(int);
int i;
int num;
cout<<"请输入一个四位数:\n";
cin>>num;
int a,b,c,flag(0);
a=sortmax(num);
b=sortmin(num);
for (i=1;;i++)
{
c=a-b;
cout<<"第"<<i<<"步"<<":\n重组最大数为"<<a<<",";

cout<<"重组最小数为"<<b<<",";

cout<<"生成数为"<<a<<"-"<<b<<"="<<c<<endl<<endl;
a=sortmax(c);
b=sortmin(c);
flag++;
if(flag>10)
{
cout<<"输入了特殊值或者不符合卡不雷克运算!";
break;
}
if (c==6174)
{
cout<<"结束!";
break;
}
}

return 0;
}

int sortmax (int num)
{
int i,n(4);
int p[4];
for (i=3;num>0;i--)
{
p[i]=num%10;
num=num/10;
}

int j,k;
int flag;

flag=n;
while (flag>0)
{
k=flag;
flag=0;
for (j=1;j<k;j++)
if (p[j-1]<p[j])
{
int temp;

temp=p[j-1];
p[j-1]=p[j];
p[j]=temp;
flag=j;
}
}
return 1000*p[0]+100*p[1]+10*p[2]+p[3];
}

int sortmin (int num)
{
int i,n(4);
int p[4];
for (i=3;num>0;i--)
{
p[i]=num%10;
num=num/10;
}

int j,k;
int flag;

flag=n;
while (flag>0)
{
k=flag;
flag=0;
for (j=1;j<k;j++)
if (p[j-1]>p[j])
{
int temp;

temp=p[j-1];
p[j-1]=p[j];
p[j]=temp;
flag=j;
}
}
return 1000*p[0]+100*p[1]+10*p[2]+p[3];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息