Şimdi Ara

c++ int i aşma sorunu?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
16
Cevap
0
Favori
381
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar dün https://projecteuler.net/ bu siteye başladım iyide gittim yalnız 3. sorudahttps://projecteuler.net/problem=3 diyorki 600851475143 en büyük asal bölenini bulun şimdi programı ben yazdım uyguladım cevap eksili bişey çıkıyor ama mesela 600851475143 değil de 6008514751 işleme sokunca yani sayıyı küçülttüğümde doğru cevap alıyorum yardımcı olabilcek misiniz?



    #include "stdafx.h"
    #include <iostream>
    using namespace std;

    int asalmi(int x) {
    int x2=2,x3=0;
    for(;x2<x;x2++) {
    if(x % x2 == 0) {
    x3++;
    };

    }
    if(x3 == 0) {
    x3=1;
    }
    return x3;
    }

    void findout() {
    int i=600851475143;
    for(;i>0;i--) {
    if(600851475143% i == 0 && asalmi(i) == 1) {
    break;
    }
    }
    cout << "Result :" << i << endl;
    }

    int main()
    {
    findout();
    system("pause");
    return 0;
    }







  • Veri tipinin alabileceği uzunluğunu aşıyorsunuz.
  • teşekkürler yalnız başlıktada zaten belirttim int i aşma sorunu diye , çözümünüz var mı?
  • Long int kullanırsanız işinize yarayabilir.
  • malesef denedim
  • tamamdır arkadaşlar aradığım cevabı buldum kendime ait bi class oluşturcam atıyorum int gibi dğilde efe olcak ve alacağı max uzunluk 100000 basamaklı tarzı bişey
  • quote:

    Orijinalden alıntı: BeMasterinCpp

    tamamdır arkadaşlar aradığım cevabı buldum kendime ait bi class oluşturcam atıyorum int gibi dğilde efe olcak ve alacağı max uzunluk 100000 basamaklı tarzı bişey

    Bunu nasıl yapacaksın merak ediyorum. Kodu eklersen seviniriz.
  • long tanımlayınca zaten soru çözülüyor.
  • Result :-443946297 alıyorum cevabı int lerin tamamını long olarak değiştiriğim halde birde siz deneyin
  • negatif sayilar onemli degilse ulong falan da kullanabilirsiniz.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • const long numm = 600851475143; 
    long largestFact = 0;
    long[] factors = new long[2];

    for (long i = 2; i * i < numm; i++)
    {
    if (numm % i == 0)
    { // It is a divisor
    factors[0] = i;
    factors[1] = numm / i;

    for (int k = 0; k < 2; k++)
    {
    bool isPrime = true;
    for (long j = 2; j * j < factors[k]; j++)
    {
    if (factors[k] % j == 0)
    {
    isPrime = false;
    break;
    }
    }
    if (isPrime && factors[k] > largestFact)
    {
    largestFact = factors[k];
    }
    }
    }
    } Console.ReadKey();



    < Bu mesaj bu kişi tarafından değiştirildi Thunder_Coder -- 7 Şubat 2013; 1:16:58 >




  • neden kimse her programlama dersinin başında verilen "bu değişkenlerin max ve min değerleri olarak bunları alabilir" lafını dinlemiyor ?
  • http://efekanpulatli.blogspot.com/2013/02/third-solution-of-project-euler.html

    programın kısa sürmesi açısından biraz olasılığı küçülttüm c++ kodu linkte
  • quote:

    Orijinalden alıntı: BeMasterinCpp

    http://efekanpulatli.blogspot.com/2013/02/third-solution-of-project-euler.html

    programın kısa sürmesi açısından biraz olasılığı küçülttüm c++ kodu linkte

    süreyi çok daha kısaltabilirsin. mesela benim kodum 0,017 saniyede bitiriyor bu işlemi. ama nedense senin kodu çalıştırdığımda 2-3dk beklememe rağmen sonuç alamadım :/ bende mi sorun var anlamadım.
  • ben sadece soruyu çözmekle uğraşıyorum elbette süre kısalır :)hatta
    void findout() {
    unsigned long long i=9851475143; // think why I shortened i ?

    mesela olasılığı kısaltalım şu kısımdaki i değerini 7000 e çek yine doğru cevabı bulursun 0,017 den daha kısa bir sürede :).



    < Bu mesaj bu kişi tarafından değiştirildi BeMasterinCpp -- 10 Şubat 2013; 21:24:09 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.