AOJ 0259 All Numbers Lead to 6174
こんにちは川です。
今回は特に解説はないです。
文字列で受け取る -> 配列に入れなおします。
6174が出るまで
ソート -> 変数一つに入れなおす -> 引き算 -> 比較 ->
配列に入れ直し ー>
という順序でやってますね。
感想としては、sort関数とpow関数の精度が
急におかしくなったことでイライラしました。
結果、自分でコードを書きました。
あとやり方が汚くなっているのでそこを直したい。
#include<bits/stdc++.h>
using
namespace
std;
int
power(
int
n)
{
int
num=1;
for
(
int
i=0;i<n;i++)num*=10;
return
num;
}
int
main()
{
string str;
int
ans=6174;
while
(cin>>str&&str!=
"0000"
){
int
up[4],down[4];
if
(str!=
"6174"
){
for
(
int
i=0;i<4;i++)up[i]=str[i]-
'0'
;
bool
kawa=0;
for
(
int
i=1;!kawa;i++){
for
(
int
j=0;j<4;j++){
for
(
int
k=3;k>j;k--)
if
(up[k]<up[k-1])swap(up[k],up[k-1]);
}
for
(
int
j=0;j<4;j++)down[j]=up[3-j];
int
num[2]={};
for
(
int
j=0;j<4;j++){
num[0]+=down[j]*power(3-j);
num[1]+=up[j]*power(3-j);
}
num[0]-=num[1];
if
(num[0]==ans||num[0]==0){
if
(num[0]==0)cout<<
"NA\n"
;
else
cout<<i<<endl;
kawa=1;
}
up[0]=num[0]/1000;
up[1]=num[0]%1000/100;
up[2]=num[0]%100/10;
up[3]=num[0]%10;
}
}
else
cout<<
"0\n"
;
}
}