Bitcoin mining problem is to find a string s (hash of previous block + Merkle Tree Hash + nonce) such that sha256(s) has n leading zeros, where n determines the mining difficulty.
First a clarification. string s (block header) will include hash of previous block header, merkle root, nonce, target bits, timestamp and nonce.
So if N=6393023717201, how do I expect 63,93,02,37,17,201 number of zeroes in 16bit length string?
That is not how difficulty is represented. We start with the genesis block that has a difficulty of 1. At that difficulty we needed to find the block hash that was less than 0x00000000ffff0000000000000000000000000000000000000000000000000000
. The current target hash is finding block header less than 0x0000000000000000002c071d0000000000000000000000000000000000000000
. So your difficulty number is genesis block header hash target/current block header hash target
. That's how you get 6393023717201.863.
Refer here for more info as to how block header hash target is determined using target bits that are in the block header.
Why difficulty decreases at some point in time?
In bitcoin the difficulty keeps the average block time at 10 minutes. If miners start using sophisticated instruments (eg. ASIC chips) that find the solution to the block header faster than 10 minutes, then every 2016 block the difficulty is adjusted so that the time needed to mine blocks increases. If miners start lowering their investments in sophisticated instruments so that average block mining time over 2016 blocks is more than 10 minutes, then the difficulty is lowered so that block mining time is faster. All of this is done so that we converge to 10 minutes as the average block mining time.