Guest User

Untitled

a guest
Mar 11th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.26 KB | None | 0 0
  1. #define TRUE 1
  2. #define FALSE 0
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. int size = 100;
  7. char *a;
  8.  
  9. void grow(){
  10.     size *= 2;
  11.     a = realloc(a,sizeof(char)*size);
  12. }
  13.  
  14. void shift(int len){
  15.     int i=0;
  16.     for(i=len+1;i>0;--i){
  17.         a[i] = a[i-1];
  18.     }
  19. }
  20.  
  21. int getline(){
  22.     int i;
  23.     char c;
  24.     a = (char *)malloc(sizeof(char)*size);
  25.     int zeroflag = TRUE;
  26.     for(i=0;(c=getchar()) != EOF && c != '\n';++i ){
  27.         if(i>=size)
  28.             grow(a);
  29.         if(c - '0' == 0 && zeroflag)
  30.             --i;
  31.         else{
  32.             a[i] = c;
  33.             zeroflag = FALSE;
  34.         }
  35.     }
  36.     if(i>=size)
  37.         grow(a);
  38.     a[i] = '\0';
  39.     return i;
  40. }
  41.  
  42.  
  43. void odd(int len){
  44.     int cur,n,i,j,l,r,carry=0;
  45.     int flag = TRUE;   
  46.     for(i=0,j=len-1;i<=j;++i,--j){
  47.         carry = 0;
  48.         cur = a[j] - '0';
  49.         n = a[i] - '0';
  50.         a[j] = a[i];
  51.         if(cur<n){
  52.             flag = FALSE;
  53.         }
  54.         if(flag && i==j){
  55.             n+=1;
  56.             if(n>9){
  57.                 carry = 1;
  58.                 l = r = i;
  59.                 while(l>=0 && carry == 1){
  60.                     n = a[l] - '0';
  61.                     n += 1;
  62.                     if(l==0 && n>9){
  63.                         if(len+1>=size)
  64.                             grow(a);
  65.                         shift(len);
  66.                         a[0] = '1';
  67.                         a[1] = '0';
  68.                         a[len] = a[0];
  69.                         break;
  70.                     }
  71.                     else if(n>9){
  72.                         a[l] = 0 + '0';
  73.                         carry = 1;
  74.                     }
  75.                     else{
  76.                         a[l] = n + '0';
  77.                         carry = 0;
  78.                     }
  79.                     a[r] = a[l];
  80.                     --l;++r;
  81.                 }
  82.             }
  83.             else{
  84.                 a[i] = n + '0';
  85.             }
  86.         }
  87.     }
  88. }
  89.  
  90. void even(int len){
  91.     int cur,n,i,j,l,r,carry=0;
  92.     int flag = TRUE;
  93.     for(i=0,j=len-1;i<=j;++i,--j){
  94.         carry = 0;
  95.         cur = a[j] - '0';
  96.         n = a[i] - '0';
  97.         a[j] = a[i];
  98.         if(cur<n){
  99.             flag = FALSE;
  100.         }
  101.         if(flag && j-i == 1){
  102.             n += 1;
  103.             if(n>9){
  104.                 l = i,r = j;
  105.                 carry = 1;
  106.                 while(l>=0 && carry == 1){
  107.                     n = a[l] - '0';
  108.                     n += 1;
  109.                     if(l == 0 && n>9){
  110.                         if(len+1>=size)
  111.                             grow();
  112.                         shift(len);
  113.                         a[0] = '1';
  114.                         a[1] = '0';
  115.                         a[len] = a[0];
  116.                         break;
  117.                     }
  118.                     else if(n > 9){
  119.                         a[l] = 0 + '0';
  120.                         carry = 1;
  121.                     }
  122.                     else{
  123.                         a[l] = n + '0';
  124.                         carry = 0;
  125.                     }
  126.                     a[r] = a[l];
  127.                     ++r;--l;
  128.                 }
  129.             }
  130.             else{
  131.                 a[i] = n + '0';
  132.                 a[j] = a[i];
  133.             }
  134.         }
  135.     }
  136. }
  137.  
  138. int main(void) {
  139.     int t,len;
  140.     scanf("%ld",&t);getchar();
  141.    
  142.     while(t--){
  143.         len = getline();
  144.         if(len % 2 == 0){
  145.             even(len);
  146.         }
  147.         else{
  148.             odd(len);
  149.         }
  150.         printf("%s\n",a);
  151.     }
  152.     return 0;
  153. }
Add Comment
Please, Sign In to add comment