কীভাবে বিগইন্টিজার ব্যবহার করবেন?


153

আমার কাছে কোডের এই টুকরা রয়েছে, যা কাজ করছে না:

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}

যোগফলটি সর্বদা 0 হয়। আমি কী ভুল করছি?


যাইহোক, যোগফলটি সহজেই মাপসই করা উচিত int, সুতরাং আপনার BigIntegerএই উদাহরণের প্রয়োজন হবে না ।
notnoop

8
নাহ, আমি কোড পরিবর্তন করেছি। সংখ্যার চেয়ে 5000 বড়
CC।

সদৃশ হিসাবে লিঙ্কযুক্ত প্রশ্নটি এই প্রশ্নের মতো একই সমস্যা বলে মনে হচ্ছে না (লিঙ্কযুক্ত প্রশ্নটি হ'ল কোন ফাংশনটি কীভাবে BigInteger যুক্ত করা যায়, এটি অ্যাড ফাংশনটি কীভাবে ব্যবহার করতে হবে)
justhalf

উত্তর:


203

BigIntegerঅপরিবর্তনীয় জাভাডোকস জানিয়েছে যে () "[r] একটি বিগইন্টেগারকে যুক্ত করে যার মান (এটি + ভাল)" " অতএব, আপনি পরিবর্তন করতে পারবেন না sum, আপনার addপদ্ধতির ফলাফলটি পরিবর্তনশীলটিতে পুনরায় সাইন ইন করতে হবে sum

sum = sum.add(BigInteger.valueOf(i));

1
যতক্ষণ না আপনি 2 ^ 31-1 এর বেশি না যান ততক্ষণ যথেষ্ট হবে, যতক্ষণ আপনি 2 ^ 63-1 এর বেশি না যান ততক্ষণ যথেষ্ট হবে।
জিন হোমিনাল

2
যা, তার উদাহরণে, সে তা করবে না।
মার্কপোয়েল

105
তবে সমস্যাটি কী তা বোঝার জন্য তিনি সম্ভবত তাঁর উদাহরণটি সরল করেছেন?
thecoshman

@ থেকোশম্যান - আপনি বেশ সঠিক এবং আপনার মন্তব্যে উপস্থিতির সংখ্যা এই জাতীয় প্রশ্নগুলির সকল পাঠকের জন্য বুদ্ধিমান পরামর্শ show আরও কিছু বিজ্ঞ পরামর্শ হ'ল " উত্তর দেওয়ার আগে বা মন্তব্য করার আগে অন্যেরা কী লিখেছিল তা পড়ুন। " উদাহরণস্বরূপ, এই ক্ষেত্রে এটির জন্য কোনও চিন্তাভাবনারও প্রয়োজন নেই যেহেতু ওপি স্পষ্টভাবে বলেছে যে প্রশ্নের নীচের মন্তব্যে তিনি ঠিক এটি করেছিলেন: " না, আমি কোডটি পরিবর্তন করা হয়েছে 5000 সংখ্যাটি 5000 এর চেয়ে বড় ""
ওএমওয়াই

58
sum = sum.add(BigInteger.valueOf(i))

BigIntegerবর্গ অপরিবর্তনশীল, অত: পর আপনি তার অবস্থা পরিবর্তন করতে পারবে না। সুতরাং "অ্যাড" কল করা BigIntegerবর্তমানকে পরিবর্তিত করার পরিবর্তে একটি নতুন তৈরি করে ।


22

অন্যান্য জবাবগুলি এটি পেরেক করেছে; বিগইন্টিজার অপরিবর্তনীয়। কোডটি কাজ করার জন্য এখানে সামান্য পরিবর্তন's

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum = sum.add(BigInteger.valueOf(i));
    }
}

11

বিগইন্টিজার একটি অপরিবর্তনীয় শ্রেণি। সুতরাং আপনি যখনই কোনও পাটিগণিত করেন, আপনাকে আউটপুটটি একটি ভেরিয়েবলে পুনরায় সাইন করতে হবে।


11

java.math.BigIntegerএকটি অপরিবর্তনীয় শ্রেণি তাই আমরা ইতিমধ্যে বরাদ্দকৃত বস্তুর অবস্থানটিতে নতুন অবজেক্টটি বরাদ্দ করতে পারি না। তবে আপনি নতুন মান নির্ধারণ করতে নতুন অবজেক্ট তৈরি করতে পারেন:

sum = sum.add(BigInteger.valueOf(i));

3

হ্যাঁ এটি অপরিবর্তনীয়

sum.add(BigInteger.valueOf(i));

সুতরাং বিগইন্টেগার শ্রেণির মেথড অ্যাড () এর দ্বারা নিজস্ব মানটিতে নতুন বিগইন্টগার মান যুক্ত হয় না, তবে বর্তমান বিগইন্টিজার পরিবর্তন না করেই একটি নতুন বিগইন্টিজার রেফারেন্স তৈরি করে এবং প্রদান করে এবং স্ট্রিংসের ক্ষেত্রেও এটি ঘটেছিল


0

আসলে আপনি ব্যবহার করতে পারেন,

BigInteger sum= new BigInteger("12345");

বিগইন্টেগার ক্লাসের জন্য অবজেক্ট তৈরি করার জন্য। তবে এখানে সমস্যাটি হ'ল আপনি ডাবল কোটগুলিতে ভেরিয়েবল দিতে পারবেন না o সুতরাং আমাদেরকে ভ্যালুওএফ () পদ্ধতিটি ব্যবহার করতে হবে এবং আমাদের আবার সেই যোগফলটি সংরক্ষণ করতে হবে o সুতরাং আমরা লিখব,

sum= sum.add(BigInteger.valueOf(i));

0

Bigintegerএকটি অপরিবর্তনীয় বর্গ। এই জাতীয় সংখ্যার জন্য আপনার আউটপুটটির স্পষ্টতই মূল্য নির্ধারণ করতে হবে:

sum = sum.add(BigInteger.valueof(i));    

4
এটি একই ব্যাখ্যা সহ এখন অষ্টম উত্তর, সুতরাং এই উত্তরটি কীভাবে সহায়ক?
টম

-6

যেহেতু আপনি কিছু অন্তর্নিহিত মানগুলি এক সাথে সংযুক্ত করছেন, তাই BigInteger ব্যবহার করার দরকার নেই। longতার জন্য যথেষ্ট। int32 বিট হয়, যখন longb৪ বিট হয়, এতে সমস্ত ইনট মানগুলির যোগফল থাকতে পারে।


"তবে সমস্যাটি কী তা বোঝার জন্য তিনি সম্ভবত নিজের উদাহরণটি সহজ করে দিয়ে ভাবতে পারেন যে সত্যিই কঠিন?" (থোকোশম্যানের উদ্ধৃতি)
বুলওয়ার্সেটর

5
এই প্রশ্নের জন্য, আমার উত্তরটি আমাদের কিছুটা সুযোগ। যেহেতু বিষয়টি কীভাবে BigInteger ব্যবহার করবেন সেদিকে দৃষ্টি নিবদ্ধ করে। আমার ব্যক্তিগত অভিজ্ঞতাগুলির মধ্যে একটি, যদি আমরা কিছু পূর্ণসংখ্যা যোগ করতে চাই এবং সংখ্যাগুলি খুব বড় না হয় তবে আমি দীর্ঘকে পছন্দ করব। কারণ এটি ব্যবহার করা সহজ এবং দ্রুত চালায়। বড় আকারের ইনপুটগুলির জন্য, বিগইন্টিজারটি ভাল পছন্দ।
frank.liu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.