p1469.cpp

来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 59 行

CPP
59
字号
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;

const   int     Pow [10] = { 1 , 10 , 100 , 1000 , 10000 , 100000 , 1000000 , 10000000 , 100000000 , 1000000000 };

int     N , Long;
int     len , Ans [100];

void    Work ()
{
        len = 0;
        for ( Long = 0; Long < 10 && Pow [Long] <= N; Long ++ );
        Long --;
        int     i , k , tmp , A , B;
        for ( i = 0; i <= Long; i ++ ) {
                tmp = N / Pow [i];
                A = tmp / 11;
                k = tmp % 11;
                tmp = N % Pow [i];
                if ( tmp % 2 || A + k == 0 ) continue;
                B = tmp / 2;
                if ( k < 10 )
                Ans [len ++] = A * Pow [i] * 10 + k * Pow [i] + B;
                if ( k == 0 || i == 0 ) continue;
                k --; B += Pow [i] >> 1;
                if ( A + k == 0 ) continue;
                Ans [len ++] = A * Pow [i] * 10 + k * Pow [i] + B;
        }
        sort ( Ans , Ans + len );

        k = 0; if ( len )
        for ( k = i = 1; i < len; i ++ ) if ( Ans [i] != Ans [i - 1] )
                Ans [k ++] = Ans [i];
        len = k;
}

main ()
{
//        freopen ( "p.in" , "r" , stdin );
//        freopen ( "p.out" , "w" , stdout );

        int     total , i , j , len1 , len2;
        for ( scanf( "%d" , &total ); total; total -- ) {
                scanf ( "%d" , &N );
                Work ();
                printf ( "%d\n" , len );
                for ( i = 0; i < len; i ++ ) {
                        printf ( "%d + " , Ans [i] );
                        len1 = Ans [i] ? log10 ( Ans [i] ) + 1: 1;
                        len2 = N - Ans [i] ? log10 ( N - Ans [i] ) + 1 : 1;
                        for ( j = len2 + 1; j < len1; j ++ ) printf ( "0" );
                        printf ( "%d = %d\n" , N - Ans [i] , N );
                }
                if ( total > 1 ) printf ( "\n" );
        }
}
 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?