বেস 10 দিয়ে না গিয়ে কোনও বেস থেকে কোনও বেসে রূপান্তরিত করার পিছনে গণিত?


36

আমি যে কোনও বেস থেকে কোনও বেসে রূপান্তরিত করার পিছনে গণিতের দিকে নজর রেখেছি। এটি কোনও কিছুর চেয়ে আমার ফলাফলগুলি নিশ্চিত করার বিষয়ে বেশি। আমি mathforum.org এ আমার উত্তর বলে মনে হচ্ছে তা খুঁজে পেয়েছি তবে এখনও আমি নিশ্চিত নই যে আমার এটি ঠিক আছে কিনা। আমার কাছে একটি বৃহত্তর বেস থেকে ছোট বেসে রূপান্তর আছে ঠিক আছে কারণ এটি আপনি পরবর্তী অঙ্কের পুনরাবৃত্তি যুক্ত করতে চান বেস দ্বারা প্রথম অঙ্কের গুণ করা হয়। ছোট বেস থেকে বড় বেসে রূপান্তর করার সময় আমার সমস্যাটি আসে comes এটি করার সময় তারা আপনার যে বৃহত্তর বেসটি চান তা আপনার নিজের ছোট বেসে রূপান্তর করতে কীভাবে প্রয়োজন তা নিয়ে কথা বলেন। একটি উদাহরণ বেস 4 থেকে বেস 6 এ যাচ্ছে আপনাকে 6 নম্বরটি বেস 4 এ 12 রূপান্তর করতে হবে 12 আপনি বড় থেকে ছোট রূপান্তর করার সময় আপনি ঠিক একই কাজটি করেছিলেন। এটির সাথে আমার যে অসুবিধা হচ্ছে তা হ'ল মনে হচ্ছে আপনার অন্য বেসে একটি নম্বর কী তা জানা দরকার। সুতরাং 6 টি বেসে 4 কী আছে তা আমার জানা দরকার This এটি আমার মনে একটি বড় সমস্যা তৈরি করে কারণ তখন আমার একটি টেবিলের প্রয়োজন হবে। কেউ কি আরও ভাল ফ্যাশনে এটি করার একটি উপায় জানেন।

আমি ভেবেছিলাম একটি বেস রূপান্তর সাহায্য করবে তবে আমি সেই কাজটি পাই না। এবং আমি যে সাইটটি পেয়েছি তা দেখে মনে হচ্ছে বেস 10 এর মধ্য দিয়ে না গিয়ে আপনাকে বেস থেকে বেসে রূপান্তর করতে দেওয়া হয়েছে তবে আপনাকে প্রথমে বেস থেকে বেসে রূপান্তর করতে হবে তা জানতে হবে। এটি একেবারে অর্থহীন করে তোলে।

কমেন্টাররা বলছেন যে কোনও চিঠিকে একটি সংখ্যায় রূপান্তর করতে আমার সক্ষম হওয়া দরকার। যদি তা হয় তবে আমি এটি ইতিমধ্যে জানি। এটা অবশ্য আমার সমস্যা নয়। আমার সমস্যাটি একটি বড় বেসকে একটি ছোট বেসে রূপান্তর করার জন্য আমার প্রথমে আমার যে বেস নম্বরটি চান তা বেস নম্বরটিতে রূপান্তর করতে হবে। এটি করতে গিয়ে আমি উদ্দেশ্যটিকে পরাভূত করি কারণ যদি এই ঘাঁটিগুলিকে অন্যান্য ঘাঁটিতে রূপান্তর করার ক্ষমতা আমার থাকে তবে আমি ইতিমধ্যে আমার সমস্যার সমাধান করেছি।

সম্পাদনা: আমি নির্ধারণ করেছি যে কীভাবে বেসগুলি থেকে 10 এর চেয়ে কম বা সমান 10 থেকে কম বা সমান অন্যান্য ঘাঁটিতে রূপান্তর করতে হয় আমি 10 এর চেয়েও বেশি বেস থেকে 10 বা তার চেয়ে কম যে কোনও বেসে যেতে পারি। 10 থেকে বড় বেস থেকে 10 এর চেয়ে বড় বেসে রূপান্তর করার সময় সমস্যাটি শুরু হয় বা 10 এর চেয়ে ছোট বেস থেকে 10 এর চেয়ে বেশি বেসে চলে যাওয়ার জন্য আমার কোডের দরকার নেই আমার পেছনের বেসিক গণিতটি কেবল দরকার কোড প্রয়োগ করা।


1
এই ফোরামের জন্য কি এই প্রশ্নটি বিষয়বস্তুতে রয়েছে?
আন্দ্রেজ বাউর 14

2
যতক্ষণ আপনি লক্ষ্য বেসে সংযোজন এবং গুণ করতে পারেন ততক্ষণ পদ্ধতিটি তুচ্ছ। আপনি যদি না পারেন তবে আমি মনে করি এটি সম্ভব।
ক্যারোলিস জুডেলė

9
গ্রিফিন প্রথম বলা উচিত কি অনেক ছাত্র শুনতে প্রয়োজন: সংখ্যার অস্তিত্ব একটি বেস মধ্যে প্রতিনিধিত্ব হচ্ছে না । তারপরে উত্তরটি পরিষ্কার: আমাদের একটি অ্যালগরিদম দরকার, একটি প্রদত্ত বেসে একটি সংখ্যার প্রতিনিধিত্বকে সংখ্যায় রূপান্তর করার জন্য একটি (যা এমন কিছু যা গ্রহণ করে stringএবং ফেরত দেয় int), এবং একটি অ্যালগরিদম যা একটি সংখ্যা নেয় এবং তার প্রতিনিধিত্ব ফিরিয়ে দেয় প্রদত্ত বেসে
আন্দ্রেজ বাউয়ার

1
@ আন্ড্রেজবাউর প্রশ্নটি সিএস সম্পর্কে: এমনকি যদি এটি শব্দটি নাও বলা হয় তবে এটি একটি প্রতিনিধিত্বের মধ্যে রূপান্তর করার জন্য একটি অ্যালগরিদম সম্পর্কে প্রশ্ন। [আনুষঙ্গিক নোট: আমি বিভ্রান্তিকর মন্তব্যগুলির একটি গোছা মুছলাম। গ্রিফিন: আপনার প্রশ্নটি আপডেট করার জন্য এটি সম্পাদনা করুন। অন্যান্য: দয়া করে এটি চ্যাট করতে যান ]]
গিলস

1
@ গ্রিফিন আপনার মূল প্রশ্নটি থেকে অনেক দিন হয়েছে। আমি আশা করি আপনি আপনার উত্তর খুঁজে পেয়েছি। যদি তা হয় তবে সম্ভবত একটি উত্তর আপডেট করে এবং গ্রহণ করা বা আপনার নিজের পোস্ট করা দুর্দান্ত ধারণা হতে পারে। এরই মধ্যে আমি গুগলের কোড জাম আর্কাইভসে বেশ কয়েকটি দারুন সুন্দর ধারণা পেয়েছি (সি ++ এ বাস্তবায়নের বিষয়ে কথা বলছি)। এই সমস্যার জন্য কয়েকটি সমাধান হ'ল
আইজ্যাকসিসারনস

উত্তর:


45

এটি আমার কাছে খুব বেসিক প্রশ্ন বলে মনে হচ্ছে, তাই যদি আমি আপনাকে কিছুটা বক্তৃতা করি তবে আমাকে ক্ষমা করুন। আপনার এখানে শেখার জন্য সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হ'ল কোনও সংখ্যাটি তার অঙ্ক উপস্থাপনা নয় । একটি সংখ্যা একটি বিমূর্ত গাণিতিক বস্তু, যেখানে এর অঙ্ক উপস্থাপনা একটি কংক্রিট জিনিস, যথা একটি কাগজে চিহ্নগুলির সিক্যুয়েন্স (বা গণনা স্মৃতিতে বিটের ক্রম, বা আপনি কোনও সংখ্যার সাথে যোগাযোগ করার সময় শোনার ক্রম) তৈরি করেন। যা আপনাকে বিভ্রান্ত করছে তা হ'ল আপনি কখনই কোনও সংখ্যা দেখেন না তবে সর্বদা এর অঙ্ক উপস্থাপনা করেন। সুতরাং আপনি শেষ পর্যন্ত চিন্তা যে সংখ্যা হয় প্রতিনিধিত্ব।

সুতরাং, জিজ্ঞাসার সঠিক প্রশ্নটি হ'ল "আমি কীভাবে একটি বেস থেকে অন্য স্থানে রূপান্তর করব" তা নয় বরং "আমি কীভাবে খুঁজে পাব যে কোন সংখ্যার একটি অঙ্কের স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয়" এবং "আমি কীভাবে অঙ্কটির অঙ্ক উপস্থাপনা পাই? প্রদত্ত নম্বর "।

সুতরাং আসুন পাইথনে দুটি ফাংশন তৈরি করি, একটিতে একটি সংখ্যার সাথে একটি উপাত্তকে উপস্থাপন করার জন্য এবং অন্যটি বিপরীতে করার জন্য। দ্রষ্টব্য: আমরা যখন ফাংশনটি চালাই পাইথন অবশ্যই এটি স্ক্রিনে প্রিন্ট করবে যেটি বেসটি পেয়েছে 10 তবে এটির অর্থ এই নয় যে কম্পিউটারটি সংখ্যা 10-তে রাখে (এটি নয়)। এটা অপ্রাসঙ্গিক কিভাবে কম্পিউটার সংখ্যার প্রতিনিধিত্ব করে।

def toDigits(n, b):
    """Convert a positive number n to its digit representation in base b."""
    digits = []
    while n > 0:
        digits.insert(0, n % b)
        n  = n // b
    return digits

def fromDigits(digits, b):
    """Compute the number given by digits in base b."""
    n = 0
    for d in digits:
        n = b * n + d
    return n

আসুন এগুলি পরীক্ষা করে দেখুন:

>>> toDigits(42, 2)
[1, 0, 1, 0, 1, 0]
>>> toDigits(42, 3)
[1, 1, 2, 0]
>>> fromDigits([1,1,2,0],3)
42

রূপান্তর ফাংশন সজ্জিত, আপনার সমস্যা সহজেই সমাধান করা হয়:

def convertBase(digits, b, c):
    """Convert the digits representation of a number from base b to base c."""
    return toDigits(fromDigits(digits, b), c)

একটি পরীক্ষা:

>>> convertBase([1,1,2,0], 3, 2) 
[1, 0, 1, 0, 1, 0]

নোট: আমরা কি না বেস মধ্য দিয়ে পাস 10 উপস্থাপনা! আমরা বেস উপস্থাপনাটিকে সংখ্যায় রূপান্তর করি এবং তারপরে সংখ্যাটি সি সিতে রূপান্তর করি । সংখ্যাটি কোনও উপস্থাপনায় ছিল না । (আসলে এটি ছিল, কম্পিউটারটিকে কোনও উপায়ে এটি উপস্থাপন করতে হয়েছিল, এবং এটি চিপগুলিতে ঘটে এমন বৈদ্যুতিক সংকেত এবং মজাদার জিনিস ব্যবহার করে এটি প্রতিনিধিত্ব করেছিল, তবে অবশ্যই সেগুলি 0 এবং 1 এর ছিল না))bc


4
এটি আমাকে 100% বোঝায় না। প্রকৃতপক্ষে, আপনি নম্বরটি কিছু উপস্থাপনে রূপান্তর করেছেন (যদিও এটি কী তা আপনি দাবি করতে পারবেন না) কারণ কম্পিউটারগুলি প্লেটোনিক গণিতবিদ নয় এবং আপনার অ্যালগরিদম বেস তে অঙ্কের স্বেচ্ছাসেবী ক্রমকে বেস বি 2 তে রূপান্তর করতে পারে না ; এটি কেবল কংক্রিট মেশিনের দ্বারা প্রতিনিধিত্বযোগ্য সিকোয়েন্সগুলিকে রূপান্তর করতে পারে। পাইথন আকর্ষণীয়ভাবে নমনীয়; সি এত ক্ষমা করে দিত না। সালমানের স্ট্রিংগুলিকে কীভাবে b 1 থেকে b 2 এ রূপান্তর করতে হয় তা জিজ্ঞাসা করা একদম বৈধ ; যাইহোক, নির্দিষ্ট বেস সংমিশ্রণগুলি (উদাহরণস্বরূপ 2 <-> 16) ব্যতীত কেবল লিনিয়ার সময়েই এটি সম্ভব1212
21

1
প্রশ্নটি জিজ্ঞাসা করা বৈধ, তবে সঠিক উত্তরটি খুঁজে পেতে সংখ্যাটি বিমূর্ত সত্তা এই বিষয়ে সচেতন হওয়া ভাল best
আন্দ্রেজ বাউর 21

2
এই করে নম্বর দিয়ে বেস 10 উপস্থাপনা, যেমন পাস fromDigitsআয় বেস 10. নম্বর
apnorton

8
@ অ্যানারটন: না, খুব সম্ভবত এটি তা করে না । পাইথন বেস 10 অঙ্কের উপস্থাপনায় স্ক্রিনে নম্বরটি মুদ্রণ করে তবে সংখ্যাটি নিজে সেভাবে সংরক্ষণ করা হয় না। আমি যা উপার্জনের চেষ্টা করছি তা হ'ল পাইথনের ভিতরে নম্বরগুলি কীভাবে প্রয়োগ করা হয় তা অপ্রাসঙ্গিক । এটা কোনো ব্যপার না. একমাত্র বিষয়টি গুরুত্বপূর্ণ যে তারা সংখ্যার মতো আচরণ করে।
আন্দ্রেজ বাউয়ার

3
অবশেষে যে কোনও বেসের জন্য সাধারণ সমাধান এবং নির্দিষ্ট ব্যবহারের ক্ষেত্রে সীমাবদ্ধ নয়, ঘাঁটি কম than than, অথবা এমন উদাহরণ যেখানে আপনি যথেষ্ট অনন্য প্রতীক নিয়ে আসতে পারেন।
জে.মনি

21

আমি মনে করি এটি বোঝার সর্বোত্তম উপায়টি কোনও এলিয়েনের সাথে আলোচনা করা (অন্তত একটি উপমা হিসাবে)।

সংজ্ঞা বেস খ এর একটি সংখ্যা,এক্স যার অর্থ হল অঙ্কের একটি স্ট্রিংএক্স<

উদাহরণস্বরূপ 10010011011 সংখ্যার স্ট্রিংটি বেস 2 তে একটি সংখ্যা, স্ট্রিং 68416841531 বেস 10 এ একটি সংখ্যা, বিএডকাএফই বেস 16 এ একটি সংখ্যা।

এখন ধরা যাক আমি কুইক্স গ্রহে বড় হয়েছি যেখানে প্রত্যেককে Q এ কাজ করতে শেখানো হয়কুই তাদের পুরো জীবনের জন্য, এবং আমি আপনার সাথে দেখা যারা বেস ব্যবহার করা হয় । সুতরাং আপনি আমাকে একটি নম্বর দেখান, এবং আমি কি করব? এর ব্যাখ্যা দেওয়ার জন্য আমার একটি উপায় দরকার:

সংজ্ঞা আমি করতে ব্যাখ্যা বেস মধ্যে একটি সংখ্যা (দ্রষ্টব্য: বেস মধ্যে একটি সংখ্যা কুইকুই নিম্নলিখিত সূত্র দ্বারা)

[[ε]]=0[[গুলি¯]]=[[গুলি¯]]×+ +

যেখানে খালি স্ট্রিংকে চিহ্নিত করে এবং ˉ s d অঙ্ক d এ শেষ হওয়া স্ট্রিংকে বোঝায় । আমার প্রমাণটি দেখুন যা সংযোজনটি এই স্বরলিখনের জন্য পরিচিতির জন্য যোগ করেεগুলি¯

তাহলে এখানে কী হয়েছে? আপনি আমাকে বেস একটি নম্বর দিয়েছেন এবং আমি এটিকে বেসে ব্যাখ্যা করেছিসংখ্যাটি আসলে কী তা সম্পর্কে কোনও অদ্ভুত দর্শন ছাড়াই এটি কিয়েকুই

কী এই চাবিকাঠি যে এবং + + আমি ফাংশন যে বেস উপর চালনা আছে কুই নম্বর। এগুলি বেস Q এর উপর পুনরাবৃত্তভাবে সংজ্ঞায়িত সাধারণ অ্যালগোরিদম×+ +কুইকুই সংখ্যায় (অঙ্কের স্ট্রিং) ।


এটি কিছুটা বিমূর্ত মনে হতে পারে যেহেতু আমি পুরো আসল সংখ্যাগুলির পরিবর্তে ভেরিয়েবলগুলি ব্যবহার করছি। সুতরাং আসুন (প্রতীক ব্যবহার করে আপনি একটি বেস 13 জীব হয় অনুমান করা যাক ) এবং আমি বেস 7 (যা অনেক বেশি বুদ্ধিমানের) ব্যবহার করছি প্রতীক ব্যবহার α বিটা γ δ ρ ζ ξ0123456789এক্সওয়াইজেডαβγδρζξ

সুতরাং আমি আপনার বর্ণমালা দেখেছি এবং এটি এটিকে ট্যাবলেট করেছি:

0α1β2γ3δ4ρ5ζ6ξ7βα8ββ9βγএক্সβδওয়াইβρজেডβζ

তাই আমি জানি তুমি বেস কাজ , এবং আমি কি বেস 7 নম্বর কোনো অঙ্ক আপনাকে অনুরূপ লিখুন।βξ

এখন যদি আমরা পদার্থবিজ্ঞান নিয়ে আলোচনা করছিলাম এবং আপনি আমাকে মৌলিক ধ্রুবক সম্পর্কে বলছিলেন (বলুন) তাই আমার এটি ব্যাখ্যা করতে হবে:60জেড8

[[60জেড8]]=ξ(βξ)3+ +α(βξ)2+ +βζ(βξ)+ +ββ

সুতরাং আমি গুণ করে শুরু করি তবে এটি আমার জন্য গ্রেড স্কুল সামগ্রী, আমি স্মরণ করি:βζ×βξ

কোয়াক্স গুণ গুণ

×βγδρζξββγδρζξγγρξβββδβζδδξβγβζγβγρρρβββζγγγξδδζζβδγβγξδρργξξβζγρδδργζββαβαγαδαραζαξα

βζ×βξ

βζ×βξξγρβζδβγγ

সুতরাং আমি এ পর্যন্ত পেয়েছি

[[60জেড8]]=ξ(βξ)3+ +α(βξ)2+ +βζ(βξ)+ +ββ=ξ(βξ)3+ +α(βξ)2+ +δβγ+ +ββ

এখন আমার আগে যোগ করা অ্যালগরিদম ব্যবহার করে সংযোজন করা দরকার:

δβγββδγδ

সুতরাং

[[60জেড8]]=ξ(βξ)3+ +α(βξ)2+ +βζ(βξ)+ +ββ=ξ(βξ)3+ +α(βξ)2+ +δβγ+ +ββ=ξ(βξ)3+ +α(βξ)2+ +δγδ

এবং এইভাবে চালিয়ে যাচ্ছি আমি পেয়েছি

[[60জেড8]]=ζδξγρ

সংক্ষিপ্তসার: বেসের ক্ষেত্রে যদি আমার নিজের সংখ্যাটি সম্পর্কে ধারণা থাকে কুই অঙ্কগুলির স্ট্রিং, তারপরে আমার কাছে আপনার সংখ্যাগুলি বেস থেকে ব্যাখ্যা করার উপায় আছে মৌলিক গাণিতিক ক্রিয়াকলাপগুলির উপর ভিত্তি করে আমার নিজস্ব সিস্টেমে - যা বেসে স্থানীয়ভাবে কাজ করে কুই


1
ওয়েল এটি স্কুইগলি লাইনের একটি ভাল চুক্তি ছিল। যদিও আমি এটি করতে কম্পিউটার পাব?
গ্রিফিন

1
@ গ্রিফিন, আমার মনে হয় আপনি অকাল থেকে (অদ্ভুত) প্রশ্ন জিজ্ঞাসা করছেন? আপনি একটি প্রোগ্রামিং ভাষা বেছে নিন এবং বেস কিউ সংখ্যাগুলিতে সংখ্যার এবং গুণনের জন্য অ্যালগরিদম টাইপ করুন (অঙ্কগুলির তালিকা হিসাবে উপস্থাপিত), তারপরে বেস বি সংখ্যাগুলিকে বেস কিউ সংখ্যায় ব্যাখ্যা করতে এবং বেস বি সংখ্যাকে বেস কিউ সংখ্যায় ব্যাখ্যা করার জন্য একটি কার্য নির্ধারণ করুন। আমি এই সমস্ত ব্যাখ্যা করেছি।

বিষয়টি হ'ল আমি আপনার ধারণার চিত্রায়নের চেষ্টাটি জানি। আমার সমস্যাটি হ'ল আমার কম্পিউটারটি আপনার স্কুইগ্লি লাইনগুলি ব্যবহার করতে পারে না।
গ্রিফিন

আমি জানি আপনি কী ব্যাখ্যা করেছেন কিন্তু এটিকে বাস্তবে প্রয়োগ করা আরও শক্ত। আপনি দেখতে পাচ্ছেন যে এই সংখ্যাগুলি সংজ্ঞা দেওয়া তত সহজ নয়।
গ্রিফিন

1
এছাড়াও আপনি কেন আলফা অঙ্কটিকে সবচেয়ে উল্লেখযোগ্য অবস্থানে ফেলে রেখেছেন? 6 = & xi; যেহেতু 7 = & আলফা; & আলফা ;?
জিওভানি বোট্টা

9

এই মাত্র একটি refactoring (পাইথন 3) হয় Andrej এর কোড। আন্ড্রেজের কোড নম্বরগুলিকে অঙ্কের (স্কেলার) তালিকার মাধ্যমে প্রতিনিধিত্ব করা হয়, যখন নিম্নলিখিত কোডগুলিতে একটি কাস্টম স্ট্রিং থেকে নেওয়া প্রতীকগুলির তালিকার মাধ্যমে প্রতিনিধিত্ব করা হয় :

def v2r(n, base): # value to representation
    """Convert a positive number to its digit representation in a custom base."""
    b = len(base)
    digits = ''
    while n > 0:
        digits = base[n % b] + digits
        n  = n // b
    return digits

def r2v(digits, base): # representation to value
    """Compute the number represented by string 'digits' in a custom base."""
    b = len(base)
    n = 0
    for d in digits:
        n = b * n + base[:b].index(d)
    return n

def b2b(digits, base1, base2):
    """Convert the digits representation of a number from base1 to base2."""
    return v2r(r2v(digits, base1), base2)

একটি কাস্টম বেসে প্রতিনিধিত্ব থেকে মান থেকে রূপান্তর সম্পাদন করতে:

>>> v2r(64,'01')
'1000000'
>>> v2r(64,'XY')
'YXXXXXX'
>>> v2r(12340,'ZABCDEFGHI') # decimal base with custom symbols
'ABCDZ'

উপস্থাপনা থেকে (একটি কাস্টম বেসে) মান রূপান্তর করতে:

>>> r2v('100','01')
4
>>> r2v('100','0123456789') # standard decimal base
100
>>> r2v('100','01_whatevr') # decimal base with custom symbols
100
>>> r2v('100','0123456789ABCDEF') # standard hexadecimal base
256
>>> r2v('100','01_whatevr-jklmn') # hexadecimal base with custom symbols
256

একটি গ্রাহক বেস থেকে অন্যটিতে বেস রূপান্তর করতে:

>>> b2b('1120','012','01')
'101010'
>>> b2b('100','01','0123456789')
'4'
>>> b2b('100','0123456789ABCDEF','01')
'100000000'

1
সাইটে আপনাকে স্বাগতম এবং আপনার অবদানের জন্য ধন্যবাদ। তবে, ভাল-অপ্টিমাইজড সোর্স কোড তৈরি করা এই সাইটটি আসলে কী তা নয়। আন্ড্রেজের কোড ধারণাগুলি পরিষ্কার করেছে, যা তার উত্তরের জন্য প্রয়োজন, তবে এর বাইরে কোডটি উন্নত করা কম্পিউটার বিজ্ঞানের চেয়ে প্রোগ্রামিংয়ের বিষয় ।
ডেভিড রিচার্বি

1
@ ডেভিডরিচার্বি আমি আংশিকভাবে একমত, তবে একটি মন্তব্য করার জন্য এই অবদানটি অনেক দীর্ঘ ছিল এবং এটির সেরা জায়গাটি আন্দ্রেজের উত্তরের কাছাকাছি যেহেতু আমি এখানে পোস্ট করেছি posted যাইহোক আপনি যদি মনে করেন এটি ভাল হয় তবে আমি কোডের একটি লিঙ্কযুক্ত একটি মন্তব্যে এটি রূপান্তর করতে পারতাম, তবে এটি কি শুদ্ধিকাপের আধিক্য হবে না?
মিমজেজ

1

বেস toDigits()কনভার্সেশন এর মৌলিক ক্রিয়াকলাপ হল @ আন্ড্রেজবাউর উত্তরটির ক্রিয়াকলাপ। তবে এটি তৈরি করার জন্য সংখ্যার অভ্যন্তরীণ উপস্থাপনায় কোনও সংখ্যা তৈরি করার দরকার নেই, যা মূলত 2 এবং উপস্থাপনের ভিত্তিতে রূপান্তর। আসল বেস উপস্থাপনায় প্রয়োজনীয় অপারেশন করতে পারেন make

সুতরাং প্রথম পদক্ষেপটি পুনরাবৃত্তিযোগ্য মডুলো বিভাগ অপারেশন করা

def convertBase(n,original_base,destination_base):
    digits = []    
    while not is_zero(n):
        digits.insert(0,modulo_div(n,original_base,destination_base))
    return digits

অভ্যন্তরীণ উপস্থাপনাটি অঙ্কগুলি হওয়ায় শূন্য পরীক্ষার জন্য একটিকে একটি বিশিষ্ট ফাংশন করতে হয়

def is_zero(n):
    for d in n:
        if d != 0:
            return False
    return True

অবশেষে একটিকে মডুলো_ডিভ ক্রিয়াকলাপ করতে হবে যা স্কুলে আমরা শিখেছি গন্তব্যের ভিত্তিতে আসলে স্ট্যান্ডার্ড বিভাগ।

def modulo_div(n,original_base,destination_base):
    carry = 0
    for i in range(len(n)):
        d = n[i]
        d+=original_base*carry 
        carry = d%destination_base 
        d=(d//destination_base)
        n[i] = d
        #print(i,d,carry)
    return carry

কোডটি যাচাই করার জন্য কেবল একটি পরীক্ষার চেক সঠিক:

print(convertBase([1,1,2,0], 3, 2))
#[1, 0, 1, 0, 1, 0]

print(convertBase([1, 0, 1, 0, 1, 0], 2, 3))
#[1, 1, 2, 0]

পোস্ট করার জন্য ধন্যবাদ তবে দয়া করে মনে রাখবেন যে আমরা কোনও কোডিং সাইট নই, সুতরাং একটি বড় কোডের উত্তর এখানে উত্তর হিসাবে উপযুক্ত নয়। বিশেষত যখন প্রশ্নটি স্পষ্টভাবে বলে, "আমার কোডের দরকার নেই, এর পিছনে আমার কেবল গণিতের প্রয়োজন।"
ডেভিড রিচার্বি

@ ডেভিডরিচার্বি আমি পাঠ্য যুক্ত করার চেষ্টা করেছি।
জাভেয়ের কম্বেল

ধন্যবাদ। এবং আমি দেখতে পেলাম এই পৃষ্ঠাটিতে প্রচুর কোডের হ্যাক রয়েছে!
ডেভিড রিচার্বি

0

আমি বেস রূপান্তর করার একটি সহজ উপায় জানি যা কম্পিউটার প্রোগ্রামের প্রয়োজন হয় না। এটি যে কোনও বেস থেকে বেস 2 এবং তদ্বিপরীত রূপান্তর করার উপায় নির্ধারণ করে এবং তারপরে একটি বেস থেকে অন্য বেসে প্রথমে প্রথম বেস থেকে বেস 2 এ রূপান্তর করে বেস 2 থেকে অন্য বেসে রূপান্তর করে। 2 কোনও বেসে গুণ বা ভাগ করতে এত সহজ।

যে কোনও বেস থেকে বেস 2 তে রূপান্তর করতে, আপনাকে যা করতে হবে তা হ'ল যে কোনও সংখ্যার জন্য, আপনি যদি তার বেস 2 স্বরলিপিটি নেন এবং 0 থেকে শুরু করেন এবং তারপরে প্রতিটি অঙ্কের জন্য বাম থেকে ডানদিকে ডাবল হয় যদি সেই সংখ্যাটি শূন্য হয় এবং সংখ্যার চেয়ে 1 যোগ করার চেয়ে দ্বিগুণ যদি অঙ্কটি 1 হয় তবে আপনি নিজেই সেই সংখ্যাটিতে পৌঁছবেন। এখন যে কোনও বেসে সেই নম্বর দেওয়া, আপনি একটি বেস এবং বাকী অংশ পেতে 2 ভিত্তিতে ভাগ করতে পারেন। অবশিষ্টটি যদি 1 হয়, সর্বশেষ বাইনারি অঙ্ক 1 এবং বাকী 0 হয়, শেষ বাইনারি অঙ্ক 0 আবার 2 দ্বারা ভাগ করুন। অবশিষ্টটি যদি 1 হয়, দ্বিতীয় শেষ সংখ্যাটি 1 হয় এবং অবশিষ্টটি 0 হয়, দ্বিতীয় শেষ সংখ্যা 0 হয় এবং আপনি 0 এর ভাগফল না পাওয়া অবধি।

বেস 2 থেকে যে কোনও বেসে রূপান্তর করতে, আপনাকে যা করতে হবে তা কেবল সেই বেসে করতে হবে, 0 থেকে শুরু করুন, তারপরে প্রতিটি বাইনারি অঙ্কের জন্য বাম থেকে ডানে যেতে হবে, সেই বেসে দ্বিগুণ যদি সেই অঙ্ক 0 হয় এবং ডাবল হয় তবে সেইটিতে 1 যুক্ত করুন বেসটি যদি সংখ্যা 1 হয়।


2 is so easy to multiply or divide by in any base.আমি দেখতে পাই না যে দুটি বিজোড় ঘাঁটির জন্য যে কোনও দুটি পাওয়ার থেকে একাধিক (11 এবং 13 এর সাথে শুরু করা)।
গ্রেইবার্ড

0

আপনি বেস এন থেকে বেস 10 তে কোনও ইন্টারমিডিয়েট বেসে কোনও রূপান্তর ছাড়াই রূপান্তর করতে পারেন।

বেস এন থেকে বেস 9 তে রূপান্তর করতে, উদাহরণস্বরূপ, আপনি বেস 10 তে রূপান্তর করার জন্য অ্যালগরিদম নিয়ে যান এবং "10" কে "9" দিয়ে প্রতিস্থাপন করুন। অন্য যে কোনও বেসের জন্য একই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.