2013年6月30日 星期日

2013/06/30 UVA 10018 - Reverse and Add

/* http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=959 */
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s[20]; int a[100], b[100]; int cn;
int check()
{
    int l = 0, r = cn;
    while( r > l )
    {
        if( a[l]!=a[r] ){ return 0; }
        r--; l++;
    }
    return 1;
}
int main()
{
    int n; scanf("%d", &n);
    while( n-- )
    {
        int SJ = 0;cn = 0;
        scanf("%s", &s);
        for(int i = strlen(s)-1; i >= 0; i--, cn++)
        {
            a[cn] = s[i]-'0';
        }
        cn--;
       
     
        SJ++;
        for(int i = 0; i <= cn; i++) b[i] = a[i];
        for(int i = 0; i <= cn; i++)
        {
            a[i]+=b[cn-i];
        }
       
        for(int i = 0; i < cn; i++)
        {
            if( a[i] >= 10 ){ a[i]-=10; a[i+1]++; }
        }
       
        if( a[cn] >= 10 ){ a[cn++] -= 10; a[cn] = 1; }
       
        while( check()==0 )
        {
            for(int i = 0; i <= cn; i++) b[i] = a[i];
            for(int i = 0; i <= cn; i++)
            {
                a[i]+=b[cn-i];
            }
       
            for(int i = 0; i < cn; i++)
            {
                if( a[i] >= 10 ){ a[i]-=10; a[i+1]++; }
            }
       
            if( a[cn] >= 10 ){ a[cn++] -= 10; a[cn] = 1; }
            SJ++;
        }
        printf("%d ", SJ);
        for(int i = 0; i <= cn; i++)
            printf("%d", a[i]);
        printf("\n");  
    }
}

沒有留言:

張貼留言