From ecce626376c089751e6b569be83bc48ee9128256 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Mon, 18 Jul 2022 22:12:57 -0500 Subject: [PATCH] 20 complete! Co-authored-by: sigonasr2 --- archives/20/current | Bin 0 -> 16464 bytes archives/20/src/main.c | 54 +++++++++++++++++ archives/20/src/utils.c | 128 ++++++++++++++++++++++++++++++++++++++++ archives/20/src/utils.h | 12 ++++ current | Bin 16312 -> 16464 bytes src/main.c | 36 ++++++++++- src/utils.c | 12 +++- 7 files changed, 237 insertions(+), 5 deletions(-) create mode 100755 archives/20/current create mode 100644 archives/20/src/main.c create mode 100644 archives/20/src/utils.c create mode 100644 archives/20/src/utils.h diff --git a/archives/20/current b/archives/20/current new file mode 100755 index 0000000000000000000000000000000000000000..38b1d79aa6a17791b572b18b33307d2a8ef5f309 GIT binary patch literal 16464 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 I3|y@EFK!!@=Kufz literal 0 HcmV?d00001 diff --git a/archives/20/src/main.c b/archives/20/src/main.c new file mode 100644 index 0000000..7e96d2d --- /dev/null +++ b/archives/20/src/main.c @@ -0,0 +1,54 @@ +#include +#include "utils.h" +#include + +/* + n! means n × (n − 1) × ... × 3 × 2 × 1 + + For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800, + and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27. + + Find the sum of the digits in the number 100! + + + https://projecteuler.net/problem=20 +*/ + + +int digitCount(int numb) { + int digitCount=1; + while (numb>=10) { + numb/=10; + digitCount++; + } + return digitCount; +} + +char*numberToString(int numb) { + char*num=malloc(digitCount(numb)); + int counter=digitCount(numb)-1; + while (numb!=0) { + num[counter--]=(numb%10)+'0'; + numb/=10; + } + return num; +} + +int main(int argc,char**argv) { + struct String factorialSum = {1,"1"}; + int counter=2; + while (counter<=100) { + factorialSum=mult(factorialSum,(struct String){digitCount(counter),numberToString(counter)}); + printf("%s\n",factorialSum.str); + counter++; + } + + printf("%s",factorialSum.str); + int digitSum=0; + for (int i=0;i +#include + +struct String mult(struct String numb1, struct String numb2) { + struct String n1 = numb1; + struct String n2 = numb2; + byte carryover = 0; + if (numb2.length>numb1.length) { + n1=numb2; + n2=numb1; + } + int addends[n2.length][n1.length+1]; + for (int i=0;i=0;i--) { + carryover=0; + for (int j=n1.length-1;j>=0;j--) { + int mult = (n1.str[j]-'0')*(n2.str[i]-'0')+((carryover!=0)?carryover:0); + //printf(" %d/%d\n",mult,carryover); + carryover=0; + if (mult>=10) { + carryover=mult/10; + mult=mult%10; + } + addends[(n2.length-1)-i][j+1]=mult; + } + if (carryover>0) { + addends[(n2.length-1)-i][0]=carryover; + } + } + //printIntDoubleArr(n2.length,n1.length+1,addends); + struct String sum = {1,"0"}; + for (int i=0;i=numb2.length) { + for (int offset=0;offsetoffset) { + //printf("%c %c\n",numb1.str[numb1.length-offset-1],numb2.str[numb2.length-offset-1]); + int sum=((numb1.str[numb1.length-offset-1]-'0')+(numb2.str[numb2.length-offset-1]-'0'))+((carryover>0)?carryover--:0); + if (sum>=10) { + carryover=1; + sum-=10; + } + str[offset]=sum+'0'; + } else { + str[offset]=numb1.str[numb1.length-offset-1]+((carryover>0)?carryover--:0); + } + } + } else { + for (int offset=0;offsetoffset) { + //printf("%c %c\n",numb1.str[numb1.length-offset-1],numb2.str[numb2.length-offset-1]); + int sum=((numb1.str[numb1.length-offset-1]-'0')+(numb2.str[numb2.length-offset-1]-'0'))+((carryover>0)?carryover--:0); + if (sum>=10) { + carryover=1; + sum-=10; + } + str[offset]=sum+'0'; + } else { + str[offset]=numb2.str[numb2.length-offset-1]+((carryover>0)?carryover--:0); + } + } + } + if (carryover>0) { + str = realloc(str,++digitCount); + str[digitCount-1]='1'; + } + for (int i=0;idL~8LW$pm^_M-;9)Q8ewzLNY4i3Jj*uN zScf5ltm51%{`)%TwgC5DP9I@M3>!^5ni_WrTXxpgvV^!-y*fb;{&j)@Zbao5W9o%X z5KZlbkXm1#EPz(6%6q5n*U%Zg(4f*yne`?Cte@c-Ld(=vC8)G8OId_&=j((%mTg=@ z^lYusW;bZcfYB8Sf&EWldyKY<8B?SaQ>54;?dnwdxY^h??K(7tuVZgPtT;^s*fT|H zWS<#rEGa%IIWmQ7V#)C~lGyEve==deWnRJ)PC>XD%XyM5wmjsmLtj@%+hVa;=xg)b zn{}A;)zN(#4T@_)-<-8t5Ks>E7rD37pG~9BO{4!jjs9o~orVs3r!bH{%7!iTD|?^^ zu`~v$J+ZzB{B){h~2RlFRM{BKqFj%Mm8dwO z@LPfJixMhc8`~mRkF)vd^XJnui~4CKDCNoGwP0n8R$r59h9p^>kjM}{5wNJCy%>7W zxX|w5cmB4q?jBsV`y3AoOrp9Kh#xtU(qBAft1T5k2On zm!uxx3XoAu%8p2;p$a;nXj})43i=VKxapXij=1SR>1nS-&&W-f*f70GZ%A}7`WrB( z{SqCbYlkop%CP2=@1RO?0J=2b*()pDK}hI9o=}*FjV=SFuo%G7!p0suEcstH%n!SWAr?UoOq)GZ%GshfTdp3b}JFhCd` z8gYH&A8dVU$Fd#ZIqWZmU$h)sANH@*)&*`lD)o*cjeLn66IGsg&)%-dv@yYS82F=lRu#H+5#SrI9$RCHeFhm`)AIT|m6s&~FU3*CO zuV$~M*|MWOtWIlWbnv)LZU`SH~zPB(R;_F2a%rqXLrMHB=mY()F7DSJkKL}#LNjK=@ zJWUGu-afsqf+lLh9F!R`+^H!-Y#%$2Sfb2(F>KHWW@_c-a`=dAn0U0Xd%;vLU|3=MF zoW9E_;k%6KX^kOQWkblDOwQcuEyQMk3pja7^UVGh zFp|YC7%t@`fBQO!sed;phy4%3FYduuKGe`7bDEEv+>RnFHTVq5!iD?AiB}yGRs$a7rwmqc7MKx_v_v_G8snnhe#5NxYTdDK zSe?B<_sTcjzqMP4j$Z3Nk{L&I&wkzAb4NDG+06$-J$>`9;t_or>c3nf4mbCFmB9@dbRa!$)vZqxjeqA6Zs2j{%7-(m2&gq&SMVpUzOV^`BQN5d9JBP>1j zTk9KlIUd_t>&Wp4c|y)p9+Qv*H@xB8p)c7Ch;K&Y|Bl680(|PLSnPekX28E7AFvtl z9K^;)Is>vzg7l9A-VONouVb+)z=4~wS+N#a%z&+X1MnTd2=hDU(!cY>*~I-b7{ zE`a4yxGN!K3;W11-+KsF+M6OOro!C_cPH?7AVa-o1Gd6_2|TVso;cI;ylz#p@tLG} zd{adEAK^AYvVQ=alUE%V z`BwM4*}fSW>Wgik`qhD1;kAh!xhKmS%2Fu10z!aYx+jZ-7|C^JThv!jOb@SNy@EJC zc%5Vq{#wPGQq6QEOL>#oLhArW$cJ9opm`E znp)Jo39&QI)1;EUmS?lJsQD`11>s(1b=lZRo&&RU+3ea2yCx67f(U6)fy?!%&M}Ye zcjb}}*6(tX0K4M4i^Q}3d>gp~f9-|Pg<0_J;8vT%_YxeeVXl0es}H0O0a~(BbFN^G zYBiCm&}-C&Y(<|geC8}*WtnE>MJt_E&|0ne^z(c=xox-V*`(&fXAcxVP<>9%4 z{}iNFon1(n7V%4#eXq@aUG-_hVTX&48Q^~~;@X+8U)X^abGcC9(*(3R`%DS(n=4>Oty2 zzr@GNm)gjy-48BJCKmiIT)Dia{F&REwmn|Ev#Mcz}f*^OD>tgepzBQb*cm3 z$=XVmTf0PLuY<8(2$70&%Hy&JDt delta 3560 zcmZt}4Nz3adH3B99EBW5z~fNhQ1J&Vcc=V{s8la5ozvn7>NGkMp{Y*NiA->YwhHKZ zEt|&~bcf7!I_ao0ZE&g+2ubFW2?*HXz-jII)5cV%y=HWBs5234geIx4-|l;lD$|{L z@B9Du`+IwP(RLhe>&i@vr6RF5r~u8Bo-FvC#hsv%?vtOnlEzb1VmyVV;X=m^tdcrJ zng`5I;#^CMq)OY_QEa#MtW>FF993=4n5(7+y=C z_xX(jo7zT7UU3yy@6Jh1yoet+vrfaZj3jWzBQgu8N5wmdjT@F?51TaDnbVkw53_$7 z?YNxN`1|4=;vCj%%w#nne+Q^tY@_Mz?FR5=L=wCu?TwKEZ3C}bmMHze0jP%&y{Pft zKlv7HZ9qTL=tEftEC_55ibxO&v2A9%?X;F$qQ-4!FPT?hi3QDe)@e>oiLX}$JPR`$ zFxwsAWOmIwB~4=433i9p1ECStq`YTFwgsf7Sxbb*o{}c8BMEk#*q^uXR^qADg^53N zAvC4r|C|-1{;(F1p8##m-GtC1YtGj|XUw5f=Fp}&^nVJUwf~A`+7{JZhG>+G>md8r z%Z1k5<03c`to%1{NYFIJLHSH`29Zr4ay&59Y*Av?+;*;bNrRw2F7%5>m~2~s1FXlE zvpfJSbZA8#@mKESD4}Aa_qO2B2pI$k0z-x5Jt6)p34}f*!Hg;BJE4D`D}9d8NfOMyEu^D_ zep*E*t7(+bD}?@o&@n>)Mrd>sz1-%b!*rU^(RjHC^(vv4K>`e@!UbU-3GggE4ysE4)BX5aM4)7lO z2iS`J`1Qnj%lC<985Gp=i2nD zdb@<6mJ6)BrE*?BTY6++&-r62-ye5FjjV&BLpVwUyTHym z*v%Uz3qlOq3vgh{-MzTUZC7Mm~;556NRVVG3 zW^3mcORnku*XO5VDf@AMV1Wrs^SI%3XxYirt>F)g_!< z?e?Jj*OAki-{{J3OhRsy|7xQJ<->#L8!BpGN03uHs7t+QQv)6BsE+!}FcL#n> zzYot22=WBKFz9+UZyHV*gQiZiKf!RwEDW3oC7>ASgs0hHUQPi|<`#VP=YTb9$Nm3W z_3s4sGSI32rr*5K{~gwwu-7qU`_X@Y-FvG4~e3s?8 zek}D=vOZ}ZJMCJ=Zo0;BDm&x0+cs!Xsy-1~&HCJS7IQlxChW1#W~0kH0Kq5&?r9#+ zUMZT#PI(G(4;%KlaEMKMmf|GlS!Ksd*-NYJp5u_a6G5sQbaNGM1b!M^5f^J!*sLYG znGLV9JGOGEWJ7wXblY0t`8ED_90Q%y|Ks^hzOUmqAhk&jlsISK-?O8u?T(MN-QP-6 zJ&U0L^dk3MeNB_TvOtxJ)&qK1?3jfzH>iC5-J$8nw3!vd4Z?fE+Y`+yb&gdMbdOhH zTr0mAV6d`k{B&(h-qE(nV@*YN(@Ky!p^4Aq&FoB(9q;S^s3--qPm4XwUgBh=q@w>s z$@e5SBpLgoW%U>*GS3>9O`j_r4zniUp4G0sI-JM)*0?NTjT>eYYf6)5GzzAvprXX4 z519^ISW`tCu4j`KE=#+Xe>+>gw$#?8Q97()O>14V|DN<(-AZQftu0K_8~sT(ySMfQ zT*N$;>v1h>s&v^poN57d=wp4AE{p!3C&VTyOD+1Jh0|>Lx>C#k{yQC5S33K#gy8DU f*M8QwPQhiYZ+)rdAU}5mZ*qO9bhCsNY*_MN;9R1F diff --git a/src/main.c b/src/main.c index 6a1bddb..7e96d2d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,6 @@ #include #include "utils.h" +#include /* n! means n × (n − 1) × ... × 3 × 2 × 1 @@ -12,13 +13,42 @@ https://projecteuler.net/problem=20 */ + + +int digitCount(int numb) { + int digitCount=1; + while (numb>=10) { + numb/=10; + digitCount++; + } + return digitCount; +} + +char*numberToString(int numb) { + char*num=malloc(digitCount(numb)); + int counter=digitCount(numb)-1; + while (numb!=0) { + num[counter--]=(numb%10)+'0'; + numb/=10; + } + return num; +} + int main(int argc,char**argv) { - struct String factorialSum = {1,"0"}; - int counter=1; - printf("%s",mult((struct String){14,"85018361849301"},(struct String){7,"1849204"}).str); + struct String factorialSum = {1,"1"}; + int counter=2; while (counter<=100) { + factorialSum=mult(factorialSum,(struct String){digitCount(counter),numberToString(counter)}); + printf("%s\n",factorialSum.str); counter++; } + printf("%s",factorialSum.str); + int digitSum=0; + for (int i=0;i=0;j--) { int mult = (n1.str[j]-'0')*(n2.str[i]-'0')+((carryover!=0)?carryover:0); - printf(" %d/%d\n",mult,carryover); + //printf(" %d/%d\n",mult,carryover); carryover=0; if (mult>=10) { carryover=mult/10; @@ -32,7 +32,7 @@ struct String mult(struct String numb1, struct String numb2) { addends[(n2.length-1)-i][0]=carryover; } } - printIntDoubleArr(n2.length,n1.length+1,addends); + //printIntDoubleArr(n2.length,n1.length+1,addends); struct String sum = {1,"0"}; for (int i=0;i