//Programmer: Alireza Shafaei //Phi Calculation #include #include #include #include #include using namespace std; #define MAX 1000200 //Maximum Decimal Place struct bignum{ int num[MAX]; int len; bignum(){ for(int i=0;i b or not void diff(bignum *a,bignum *b,bignum *ans); //this function returns | a - b | in ans which is a big number void phifinalize(); //this function adds 1 to square root of five then divides it to 2 to calculate Phi //this function cleans whole stored data of a BigNumber void clean(bignum *a){ for(int i=0;inum[i]=0; //for every index } a->len=0; //length of number must be zero } int main(){ ans.num[0]=2; ans.len=1; //first number of SQRT is entered manually divi.num[0]=1; divi.len=3; cout<<"A.Sh Phi calculator\nbased on square root of 5\n"; cout<<"Please enter maximum decimal place(s):"; //Details which will be shown in the beginning of the program cin>>DecPlace; //gets decimal place data cout<<"\nCalculating the first "<>in; if(in=='y'){ cout<<"Enter file name:"; string name; cin>>name; char buff[200]; for(int i=0;ilen=1; return; } int temp=0; int len=in->len; while(inum[i]=(in->num[i]*coef)+temp; temp=out->num[i]/10; out->num[i++]%=10; } if(i==len && temp!=0){ out->num[i]=(in->num[i]*coef)+temp; temp=out->num[i]/10; out->num[i++]%=10; } out->len=i; } bool isbigger(bignum *a,bignum *b){ //checks whether a > b or not if(a->len!=b->len) return (a->len>b->len); for(int i=0;ilen;i++) if(a->num[a->len-i-1]!=b->num[b->len-i-1]) return a->num[a->len-i-1]>b->num[b->len-i-1]; return false; } void balance(bignum *num,int i){ //It's used to make difference easier! if(num->num[i+1]==0){ balance(num,i+1); } num->num[i+1]--; num->num[i]+=10; if(i==num->len-2 && num->num[num->len-1]==0) num->len--; } void diff(bignum *a,bignum *b,bignum *ans){ //ans=|a-b| bignum *a1,*a2; if(isbigger(a,b)){ a1=a; a2=b; }else{ a1=b; a2=a; } if(ans!=a1){ for(int i=0;ilen;i++) ans->num[i]=a1->num[i]; ans->len=a1->len; } for(int i=0;ilen;i++){ if(ans->num[i]num[i]) balance(ans,i); ans->num[i]-=a2->num[i]; } int i=0; while(ans->num[ans->len-i-1]==0) i++; ans->len-=i; } void phifinalize(){ //makes Phi int temp=0; ans.num[ans.len-1]+=1; phi.len=ans.len; for(int i=0;i