আমি আমার প্রথম পোস্টে একটি ত্রুটি আবিষ্কার করেছি, তাই আমি বসে বসে গণিতটি করার সিদ্ধান্ত নিয়েছি। আমি যেটা খুঁজে পেয়েছি তা হল যে এক্সেল কলামগুলি সনাক্ত করতে ব্যবহৃত নম্বর সিস্টেমটি কোনও 26 ব্যক্তি পোস্ট করা হিসাবে বেস 26 সিস্টেম নয়। 10 বেসে নিম্নলিখিতটি বিবেচনা করুন আপনি বর্ণমালার অক্ষর দিয়েও এটি করতে পারেন।
স্থান: ......................... এস 1, এস 2, এস 3: এস 1, এস 2, এস 3
............ ........................ 0, 00, 000: .. এ, এএ, এএএ
............. ....................... 1, 01, 001: .. বি, এবি, এএবি
.............. ......................…,…,…: ..…,…,…
............... ..................... 9, 99, 999: .. জেড, জেডজেড, জেডজেডজেড
স্পেসে মোট রাজ্য: 10, 100, 1000: 26, 676, 17576
মোট রাজ্য: ............... 1110 ................ 18278
এক্সেলটি বেস ২ using ব্যবহার করে পৃথক বর্ণানুক্রমিক ফাঁকে কলামগুলিকে সংখ্যার সংখ্যা দেয় can ^ 2 + এ ^ 3 +…।
ধরুন আপনি প্রথম এন স্পেসে মোট রাজ্যের A খুঁজে পেতে চান। এটি করার সূত্রটি হ'ল A = (a) (a ^ N - 1) / (a-1)। এটি গুরুত্বপূর্ণ কারণ আমাদের সূচক কে এর সাথে মিলে আমাদের N স্পেসের সন্ধান করতে হবে I বেস a} (A (a-1) / a +1)। আমি যদি একটি = 10 এবং কে = 192 এর উদাহরণ ব্যবহার করি তবে আমি জানি যে এন = 2.23804…। এটি আমাকে বলে যে কে তৃতীয় স্থানের শুরুতে রয়েছে কারণ এটি দুটি চেয়ে একটু বেশি।
পরবর্তী পদক্ষেপটি হ'ল আমরা বর্তমান স্পেসে ঠিক কতদূর রয়েছি তা সন্ধান করা। এটি সন্ধান করতে N এর মেঝে ব্যবহার করে উত্পন্ন কে-এ থেকে বিয়োগ করুন example উদাহরণস্বরূপ, এন এর তল দুটি। সুতরাং, এ = (10) (10 ^ 2 - 1) / (10-1) = 110, যখন আপনি প্রথম দুটি স্পেসের রাজ্যগুলিকে একত্রিত করবেন তখন যেমন প্রত্যাশা করা হয়। এটি কে থেকে বিয়োগ করা প্রয়োজন কারণ এই প্রথম ১১০ টি রাজ্য ইতিমধ্যে প্রথম দুটি স্পেসের জন্য গণ্য করা হত। এটি আমাদের 82 টি রাজ্যের সাথে ছেড়ে দেয়। সুতরাং, এই সংখ্যা সিস্টেমে, বেস 10-তে 192 এর প্রতিনিধিত্ব 082।
সি # কোডটি শূন্যের একটি বেস সূচক ব্যবহার করে
private string ExcelColumnIndexToName(int Index)
{
string range = string.Empty;
if (Index < 0 ) return range;
int a = 26;
int x = (int)Math.Floor(Math.Log((Index) * (a - 1) / a + 1, a));
Index -= (int)(Math.Pow(a, x) - 1) * a / (a - 1);
for (int i = x+1; Index + i > 0; i--)
{
range = ((char)(65 + Index % a)).ToString() + range;
Index /= a;
}
return range;
}
// পুরাতন পোস্ট
সি # তে একটি শূন্য-ভিত্তিক সমাধান।
private string ExcelColumnIndexToName(int Index)
{
string range = "";
if (Index < 0 ) return range;
for(int i=1;Index + i > 0;i=0)
{
range = ((char)(65 + Index % 26)).ToString() + range;
Index /= 26;
}
if (range.Length > 1) range = ((char)((int)range[0] - 1)).ToString() + range.Substring(1);
return range;
}