نمایش نتایج 1 تا 11 از 11

نام تاپیک: ضرب و جمع دو عدد 300 رقمی؟

  1. #1

    ضرب و جمع دو عدد 300 رقمی؟

    سلام
    یه برنامه به زبان سی میخواستم که دو عدد 300 رقمی رو در هم ضرب و جمع کنه. اگر ممکن منو راهنمایی کنید.
    با تشکر

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    سلام:
    شما برای اینکه این تعداد عدد رو داشته باشی راهی جز استفاده ار آرایه ای از کاراکتر نداری.
    برای این کار فقط میتونم راهنماییت کنم.
    ببین شما هر تعداد رقم رو که دارید در یه آرایه از رشته قرار بده یعنی هر عدد داخل یک بایت حافظه بعنوان کاراکتر باشن.
    حالا با این روش میتونی دو عدد در دو آرایه داشته باشی.
    برای اینکه عملیات جمع و ضرب رو اجرا کنی ابتدا عمل حمع رو بصورت زیر محاسبه کن بعد میتونی ضربش رو هم خودت حل کن.
    1 - یه آرایه تقریبا دوبرابر آرایه قبلی برای نتیجه رزرو کن.
    2 - از بایتهای اول ارایه شروع کن. و دو بایت رو بر اساس عدد باهم حمع کن در نظر داشته باش مقادیر در آرایه کاراکتری است.
    3 - اگه محتوای جمع دو رقم اول از عدد 9 بیشتر شد مقدار (10-عدد حاصل) رو تو اولین بایت از آرایه نتیجه بشورت کاراکتری قرار بده.و مقدار (10/عدد حاصل) رو بطو دستی نگه دار.
    3 به همیت ترتیب بایتهای دیگه رو جمع بزن ولی در نظر بگیر که مقدار حاصل رو با مقدار اضافی جمع کنی.
    موق باشی.

  3. #3

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    نقل قول نوشته شده توسط tdkhakpur مشاهده تاپیک
    سلام:
    شما برای اینکه این تعداد عدد رو داشته باشی راهی جز استفاده ار آرایه ای از کاراکتر نداری.
    برای این کار فقط میتونم راهنماییت کنم.
    ببین شما هر تعداد رقم رو که دارید در یه آرایه از رشته قرار بده یعنی هر عدد داخل یک بایت حافظه بعنوان کاراکتر باشن.
    حالا با این روش میتونی دو عدد در دو آرایه داشته باشی.
    برای اینکه عملیات جمع و ضرب رو اجرا کنی ابتدا عمل حمع رو بصورت زیر محاسبه کن بعد میتونی ضربش رو هم خودت حل کن.
    1 - یه آرایه تقریبا دوبرابر آرایه قبلی برای نتیجه رزرو کن.
    2 - از بایتهای اول ارایه شروع کن. و دو بایت رو بر اساس عدد باهم حمع کن در نظر داشته باش مقادیر در آرایه کاراکتری است.
    3 - اگه محتوای جمع دو رقم اول از عدد 9 بیشتر شد مقدار (10-عدد حاصل) رو تو اولین بایت از آرایه نتیجه بشورت کاراکتری قرار بده.و مقدار (10/عدد حاصل) رو بطو دستی نگه دار.
    3 به همیت ترتیب بایتهای دیگه رو جمع بزن ولی در نظر بگیر که مقدار حاصل رو با مقدار اضافی جمع کنی.
    موق باشی.
    با لیست پیوندی هم میشه. البته اگر بتونی کار کنی

  4. #4

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    با تشکر از شما.
    فکر میکنم یه راه حل اینه که ما بیایم این عدد رو خرد کنیم و تو چندتا آرایه قرار بدیم.
    اگر ممکن یه نمونه کد بنویسید.
    با تشکر

  5. #5
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    نقل قول نوشته شده توسط Cru3l.b0y مشاهده تاپیک
    با تشکر از شما.
    فکر میکنم یه راه حل اینه که ما بیایم این عدد رو خرد کنیم و تو چندتا آرایه قرار بدیم.
    اگر ممکن یه نمونه کد بنویسید.
    با تشکر
     
    byte ToNum(char ch)
    {
    return ch-'0';
    }

    char Num1[300];
    char Num2[300];
    char Result[450];
    int c=0;
    char carry;
    carry = 0;
    for( int i=0; i<strlen(Num1); i++)
    {
    Result[i] = ToNum(Num1[i])-ToNum(Num2[i])%10 + carry+'0';
    carry = ToNum(Num1[i])-ToNum(Num2[i])/10;
    C++‎;
    }
    Result[c] = Carry+'0';
    Result[c+1] = 0;

    Resultنتیجه نهای خواهد ش
    آخرین ویرایش به وسیله tdkhakpur : شنبه 19 اردیبهشت 1388 در 23:07 عصر

  6. #6

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    سلام ، به نظر من هم بهترين گزينه ، Linked List يا همان ليست هاي پيوندي است ، چون يك ساختمان داده

    پوياست و عمل مديريت حافظه و حذف نود و اضافه و ... براحتي انجام مي گيرد !!!

    موفق و پيروز باشيد !!!






  7. #7

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    میشه نمونه کد linked list را با توضیح بذارید؟
    ممنون

  8. #8
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    227

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    سلام !

    اگه نظر منو میخوای به هیچ وجه از لیست پیوندی استفاده نکن ! تا وقتی که آرایه کارت رو راه میندازه لیست پیوندی رو ولش کن ! اشاره گر زبان c هروقت دلش بخواد بهت error های بیخودی میده ! تو این سوالم که تو گفتی طول اعداد تا 300 بیشتر نیست، پس نیازی به حافظه ی پویا نداری.

  9. #9

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    نقل قول نوشته شده توسط qwerty11 مشاهده تاپیک
    سلام !

    اگه نظر منو میخوای به هیچ وجه از لیست پیوندی استفاده نکن ! تا وقتی که آرایه کارت رو راه میندازه لیست پیوندی رو ولش کن ! اشاره گر زبان c هروقت دلش بخواد بهت error های بیخودی میده ! تو این سوالم که تو گفتی طول اعداد تا 300 بیشتر نیست، پس نیازی به حافظه ی پویا نداری.
    دوست عزیز ، هر ساختمان داده ای (آرایه ، صف ، پشته ، لیست پیوندی ، درخت ، گراف و ...)

    مزایا و معایب خودش رو داره و نمیشه هیچ کدوم رو جایگزین دیگری دانست .

    و ما نباید همیشه خودمان را به چیزهای ساده عادت داده و اگر قادر به استفاده از کاربردهای بزرگ

    نباشیم ، (منظورم شما نیستید) استفاده از آن کاربرد ها را کوچک تلقی کنیم ، چه بسا

    مسائلی هستند که فقط با یک ساختمان داده خاص قابل پیاده سازی اند ، در مورد جمع اعداد

    اگر میشود با آرایه این کار را انجام داد ، ولی در مشاهده بسیاری از کد های پیادسازی شده

    با آرایه ، اشکالات و خطاهای زیادی بوجود آمده ، در گرفتن حافظه پویا در آرایه ، حافظه زیادی

    مصرف میشود ، حال اینکه لیست پیوندی فقط یک داده و یک اشاره گر دارد و کاملا پویاست

    و تقریبا میتوان گفت حافظه ای مصرف نمی کند(خیلی کم ) ، در جمع کردن اعداد و قرار دادنشان در

    آرایه باید آرایه یکبار Reverse شود و بسیاری از مشکلات دیگر ...

    نتیجه گیری : هیچ وقت نسخه خودتو واسه دیگرون تجویز نکن ، چون اگه تو پیچیدن نسخه

    خودت اشتباه کرده باشی ، خیلی آدما رو از راه اصلیشون منحرف کردی .

    موفق باشید .
    آخرین ویرایش به وسیله Salar Ashgi : شنبه 03 بهمن 1388 در 09:31 صبح دلیل: تکمیل






  10. #10
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    227

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    نقل قول نوشته شده توسط salar_cpp_cs مشاهده تاپیک
    دوست عزیز ، هر ساختمان داده ای (آرایه ، صف ، پشته ، لیست پیوندی ، درخت ، گراف و ...) مزایا و معایب خودش رو داره و نمیشه هیچ کدوم رو جایگزین دیگری دانست . و ما نباید همیشه خودمان را به چیزهای ساده عادت داده و اگر قادر به استفاده از کاربردهای بزرگ نباشیم ، (منظورم شما نیستید) استفاده از آن کاربرد ها را کوچک تلقی کنیم ، چه بسا مسائلی هستند که فقط با یک ساختمان داده خاص قابل پیاده سازی اند ، در مورد جمع اعداد اگر میشود با آرایه این کار را انجام داد ، ولی در مشاهده بسیاری از کد های پیادسازی شده با آرایه ، اشکالات و خطاهای زیادی بوجود آمده ، در گرفتن حافظه پویا در آرایه ، حافظه زیادی مصرف میشود ، حال اینکه لیست پیوندی فقط یک داده و یک اشاره گر دارد و کاملا پویاست و تقریبا میتوان گفت حافظه ای مصرف نمی کند(خیلی کم ) ، در جمع کردن اعداد و قرار دادنشان در آرایه باید آرایه یکبار Reverse شود و بسیاری از مشکلات دیگر ...

    نتیجه گیری : هیچ وقت نسخه خودتو واسه دیگرون تجویز نکن ، چون اگه تو پیچیدن نسخه
    خودت اشتباه کرده باشی ، خیلی آدما رو از راه اصلیشون منحرف کردی .

    موفق باشید .
    خیلی ممنون. اما
    من خودم با انواع و اقسام ساختمون داده ها کار کردم و مزایا و معایبشون رو میدونم. لیست پیوندی هم ساختمان داده ای هستش که هم میتونه پیچیدگی زمانی رو کم کنه و هم مصرف حافظه رو کاهش بده. اما اشاره گر و لیست پیوندی زبان c همونطوری که گفتم بعضی وقتها هر کار خودش دلش بخواد انجام میده ! چند وقت پیش بود یه برنامه با c نوشتم که توش لیست پیوندی باید استفاده میکردم. خلاصه هر کاری کردم نشد درست بشه ! به 2 تا آدم غیر از خودمم نشون دادم اونا هم توش موندن چون error الکی میداد! 2 تا متغیر عادی داشتم، یه جا که یکیش عوض میشد اون یکی هم خود به خود عوض میشد! 2 تا متغیر عادی ها نه 2 تا اشاره گر... یا حتی مثلاً پروژه ی پایانیه درس مبانیم همین استفاده از اشاره گرها بود. هیچوقت به طور عادی از برنامه خارج نمیشد! همیشه هروقت که کاربر میگفت بیا بیرون از برنامه، یهو کل tc بسته میشد! خلاصه این چیزا همیشه همراه اشاره گر c هستش به نظر من...
    اما در این مورد خاص! همونطور که گفتم چون طول اعداد 300 تا بیشتر نیست استفاده از آرایه راحت ترین کار ممکنه هستش! حتی اگر مثلاً 5000 هم بود باز آرایه بهتر بود. این کد 2 تا عدد n و m رقمی رو جمع میکنه، خودت با کدی که برای لیست نیازش هست مقایسه کن :
    int n=num1.strlen(),m=num2.strlen(),carry=0,ans[300]={0},len=0;
    for(int i=0; i<m || i<n || carry!=0; i++){
    carry += (i<n ? num1[n-i-1]-'0' : 0) + (i<m ? num2[m-1-i]-'0' : 0);
    ans[len++]=carry%10;
    carry/=10;
    }
    for(int j=len-1; j>=0; j--)
    cout<<ans[j];


  11. #11

    نقل قول: ضرب و جمع دو عدد 300 رقمی؟

    این نکته را ذکر می کنم و انتظار دارم دیگه در این تاپیک مقایسه بین لیست پیوندی و آرایه انجام نشود :

    اما اشاره گر و لیست پیوندی زبان c همونطوری که گفتم بعضی وقتها هر کار خودش دلش بخواد انجام میده ! چند وقت پیش بود یه برنامه با c نوشتم که توش لیست پیوندی باید استفاده میکردم. خلاصه هر کاری کردم نشد درست بشه ! به 2 تا آدم غیر از خودمم نشون دادم اونا هم توش موندن چون error الکی میداد!
    ببینید من خیلی آدما رو میشناسم که از اشاره گر توی C++‎‎ , C مثل یه روح میترسند و وقتی چنین افرادی

    که اصلا 2 تا برنامه درست حسابی با اشاره گر ننوشتند ، نظر خودشون رو درباره اشاره گر بیان می کنند ،

    همان نظری می دهند ، که شما بیان کردید .(البته صریحا منظورم شما نیستید ، چون خیلی افراد مبتدی

    نیز که تازه با اشاره گر آشنا میشوند این نظر را دارند )






قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •