rendered paste body#include<stdlib.h>#include<stdio.h>#include<string.h>void strrev1(char*str){ int k=0,i; char*ans=(char*)malloc(30); for(i=strlen(str)-1;i>=0;i--) ans[k++]=str[i]; ans[k]='\0'; strcpy(str,ans);}char*Add(char*str1,char*str2){ int carry=0,i,k=0; char*ans=(char*)malloc(30); strcpy(ans,""); strrev1(str1); strrev1(str2); for(i=0;i<strlen(str1) && i<strlen(str2);i++) { ans[k++]=(str1[i]-'0'+str2[i]-'0'+carry)%10+'0'; carry=(str1[i]-'0'+str2[i]-'0'+carry)/10; } while(i<strlen(str1)) { ans[k++]=(carry+str1[i]-'0')%10+'0'; carry=(carry+str1[i]-'0')/10; i++; } while(i<strlen(str2)) { ans[k++]=(carry+str2[i]-'0')%10+'0'; carry=(carry+str2[i]-'0')/10; i++; } if(carry!=0) ans[k++]=carry+'0'; ans[k]='\0'; strrev1(ans); strrev1(str1); strrev1(str2); while(ans[0]=='0') ans++; return ans;}char*g(char*n){ char*ans=(char*)malloc(30); char*i=(char*)malloc(30); strcpy(i,"0"); strcpy(ans,"0"); while((strlen(ans)<strlen(n)) || ((strlen(ans)==strlen(n) && (strcmp(ans,n)<=0)))) { i=Add(i,"1"); ans=Add(ans,i); } return i;}char*f(char*n){ int k=0,flag=0; char*ans=(char*)malloc(30); char*sum=(char*)malloc(30); char*tempSum=(char*)malloc(30); char*i=(char*)malloc(30); char*j=(char*)malloc(30); strcpy(i,"0"); strcpy(j,"0"); strcpy(ans,"0"); strcpy(sum,"0"); strcpy(tempSum,"0"); for(strcpy(i,"1");((strlen(sum)<strlen(n)) || ((strlen(sum)==strlen(n) && (strcmp(sum,n)<0))));i=Add(i,"1")) { for(strcpy(j,"1");(strlen(j)<strlen(i)) || (strlen(j)==strlen(i) && (strcmp(j,i)<=0));j=Add(j,"1")) { strcpy(tempSum,sum); for(k=0;k<atoi(j);k++) sum=Add(sum,i); if((strlen(n)<strlen(sum)) || ((strlen(n)==strlen(sum) && (strcmp(n,sum)<=0)))) { ans=Add(ans,j); flag=1; break; } else if(strcmp(j,i)!=0) strcpy(sum,tempSum); } if(flag!=1) ans=Add(ans,i); } return ans;}int main(){ int t; scanf(" %d",&t); while(t--) { char*n=(char*)malloc(30); scanf("%s",n); printf("%s",f(g(n))); } return 0;}