gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

yukicoder No.544 Delete 7

問題
No.544 Delete 7 - yukicoder
7を含んだ整数である入力を、7を使わない2つの整数の和で表してください。

解説
整数の桁を見ていって、7であれば3と4に分解することを考えます。7でなければ、そのまま使います。具体的には、 1273=(1233,40) 、 27789=(23389,4400)のようにすれば、7を使わずに2つの整数で表せます。

今回は入力を整数で受け取り、桁を見て行きながら答えとなる変数a,bに足していく形をとります。ここではfor文の条件式をn>0とし、繰り返しの中で n/=10 としながら n%10 で各桁を見ます。このとき、ループ変数として使うi をpow(10,i) として使うことで、何桁目を見ているかを表現できます。

ある桁が7の時、aに3側を、bに4側を足して行きます。7以外では、aにそのまま足します。
bは7を分離するときだけ使うことがキモです。

int main(){
    int n;
    cin>>n;
    int a=0,b=0;
    for(int i=0;n>0;i++){
        if(n%10==7){
            a+=pow(10,i)*3;
            b+=pow(10,i)*4;
        }else {
            a+=pow(10,i)*(n%10);
        }
        n/=10;
    }
    cout<<a<<" "<<b<<endl;
    
    return 0;
}