تمرین جمع اعداد بزرگ با جاوا
در این نوشته تمرین “تمرین جمع اعداد با جاوا” که در وبسایت کوئرا موجود است را برای شما کاربران عزیز حل کردهایم.
تمرین جمع اعداد بزرگ با جاوا
سوال تمرین
در این سوال ما میخواهیم عمل جمع را برای اعدادی با تعداد ارقام بسیار زیاد(مثلا اعدادی ۱۰۰ رقمی) انجام دهیم. همانطور که میدانید کامپیوتر نمیتواند اعداد با بیشتر از تقریباً ۱۵ رقم را ذخیره کند. پس راهکاری ابداع کنید که این جمعها را بتوانید انجام دهید.
ورودی تمرین جمع اعداد بزرگ
در ورودی به شما ابتدا تعداد اعدادی که باید جمع بزنید داده میشود (یعنی n) سپس در n سطر بعد در هر سطر یک عدد که تعداد ارقام آن کمتر از ۱۰۰ است.
1 ≤ n ≤ 20
خروجی تمرین جمع اعداد بزرگ
خروجی باید مجموع اعداد داده شده در ورودی شود.
مثال تمرین جمع اعداد بزرگ
Sample : ======================================== input : 3 111111111111111 22222222 2323 output : 111111133335656
حل تمرین
import java.util.Scanner; class Main { static Scanner sc; static String strInput; public static void main(String[]args) { sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); if (n < 1 || n > 20) return; String[] inputNumbers = new String[n]; int max_len = 0; for (int i = 1; i <= n; i++) { inputNumbers[i-1] = sc.nextLine(); if(max_len < inputNumbers[i-1].length()) max_len = inputNumbers[i-1].length(); } String[][] myNumbers = new String[n][max_len]; int j = 0; for (int i = 1; i <= n; i++) { for (j = 0; j < max_len; j++) { myNumbers[i-1][j] = "0"; } } int temp_len = 0; for (int i = 1; i <= n; i++) { temp_len = inputNumbers[i-1].length(); j = max_len - temp_len; for (char ch:inputNumbers[i-1].toCharArray()) { myNumbers[i-1][j] = String.valueOf(ch); j++; } } String sumNumbers = ""; int sum = 0; int borrow = 0; for(j = max_len - 1; j >= 0; j--) { for (int i = 1; i <= n; i++) { sum += Integer.parseInt(myNumbers[i-1][j]); } sum += borrow; borrow = 0; if(sum > 9) { borrow = sum / 10; sum = sum - (borrow * 10); } sumNumbers = String.valueOf(sum) + sumNumbers; sum = 0; } if(borrow!=0) { max_len++; System.out.print(String.valueOf(borrow)); } System.out.println(sumNumbers); } }
روش حل تمرین
ابتدا خط اول ورودی را دریافت میکنیم تا بدانیم اعدادی که باید برای جمع استفاده شوند چند عدد است. سپس این اعداد را تک تک دریافت میکنیم و در این حین بزرگترین عدد را هم از نظر طول مشخص میکنیم. (اندازهی طول بزرگترین عدد نه خود آن عدد) سپس در حلقهای دیگر اعداد را تک تک رقمهایشان را جدا کرده و در یک متغیر دوبعدی میریزیم. در آخر حلقهای برای محاسبه عملیات جمع ایجاد میکنیم و از آخر اعداد را با هم رقم به رقم جمع میکنیم. در این جمع یک متغیر borrow در نظر گرفته شده است که رقم نقلی هر ارزش مکانی به ارزش مکانی دیگر را نگه داری میکند. در آخر هم مقدار جمع شده را در متغیر sumNumbers نگه داری میکنیم و نمایش میدهیم.
منبع سوال: وبسایت کوئرا
اگر روش حل بهتری دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم. اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.
ارسال پاسخ