Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define TRUE 1
- #define FALSE 0
- #include <stdio.h>
- #include <stdlib.h>
- int size = 100;
- char *a;
- void grow(){
- size *= 2;
- a = realloc(a,sizeof(char)*size);
- }
- void shift(int len){
- int i=0;
- for(i=len+1;i>0;--i){
- a[i] = a[i-1];
- }
- }
- int getline(){
- int i;
- char c;
- a = (char *)malloc(sizeof(char)*size);
- int zeroflag = TRUE;
- for(i=0;(c=getchar()) != EOF && c != '\n';++i ){
- if(i>=size)
- grow(a);
- if(c - '0' == 0 && zeroflag)
- --i;
- else{
- a[i] = c;
- zeroflag = FALSE;
- }
- }
- if(i>=size)
- grow(a);
- a[i] = '\0';
- return i;
- }
- void odd(int len){
- int cur,n,i,j,l,r,carry=0;
- int flag = TRUE;
- for(i=0,j=len-1;i<=j;++i,--j){
- carry = 0;
- cur = a[j] - '0';
- n = a[i] - '0';
- a[j] = a[i];
- if(cur<n){
- flag = FALSE;
- }
- if(flag && i==j){
- n+=1;
- if(n>9){
- carry = 1;
- l = r = i;
- while(l>=0 && carry == 1){
- n = a[l] - '0';
- n += 1;
- if(l==0 && n>9){
- if(len+1>=size)
- grow(a);
- shift(len);
- a[0] = '1';
- a[1] = '0';
- a[len] = a[0];
- break;
- }
- else if(n>9){
- a[l] = 0 + '0';
- carry = 1;
- }
- else{
- a[l] = n + '0';
- carry = 0;
- }
- a[r] = a[l];
- --l;++r;
- }
- }
- else{
- a[i] = n + '0';
- }
- }
- }
- }
- void even(int len){
- int cur,n,i,j,l,r,carry=0;
- int flag = TRUE;
- for(i=0,j=len-1;i<=j;++i,--j){
- carry = 0;
- cur = a[j] - '0';
- n = a[i] - '0';
- a[j] = a[i];
- if(cur<n){
- flag = FALSE;
- }
- if(flag && j-i == 1){
- n += 1;
- if(n>9){
- l = i,r = j;
- carry = 1;
- while(l>=0 && carry == 1){
- n = a[l] - '0';
- n += 1;
- if(l == 0 && n>9){
- if(len+1>=size)
- grow();
- shift(len);
- a[0] = '1';
- a[1] = '0';
- a[len] = a[0];
- break;
- }
- else if(n > 9){
- a[l] = 0 + '0';
- carry = 1;
- }
- else{
- a[l] = n + '0';
- carry = 0;
- }
- a[r] = a[l];
- ++r;--l;
- }
- }
- else{
- a[i] = n + '0';
- a[j] = a[i];
- }
- }
- }
- }
- int main(void) {
- int t,len;
- scanf("%ld",&t);getchar();
- while(t--){
- len = getline();
- if(len % 2 == 0){
- even(len);
- }
- else{
- odd(len);
- }
- printf("%s\n",a);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment