2016-04-03 11 views
-6

Bu kodu çalıştırdığımda neden hatalı çıktı veriyorsunuz? Sistemimde doğru çıktı alıyorum. Görüntüde ilk satır sayı testi durumudur ve bunu giriş ve çıkış takip eder.CodeChef Small Factorial Çözüm

#include <stdio.h> 
int main() 
{ 
    double fact; 
    int k,i,m,n; 
    scanf("%d", &n); 
    for (i=n; i>0; i--) 
    { 
     fact=1; 
     scanf("%d", &m); 
     for(k=2; k<=m; k++) 
      fact *= k; 
     printf("%.0lf\n", fact); 
    } 
    return 0; 
} 

Örnek giriş ve çıkış M Oehm Açıklamalarda belirttiği gibi

enter image description here

+0

Lütfen size daha fazla yardımcı olmamıza yardımcı olmak için [mcve] ve [İyi bir soru nasıl sorabilirim?] (Http://stackoverflow.com/help/how-to-ask) adresine bir göz atın. Sorunu gösteren örnek girdiniz nerede? CodeChef'deki çıktı nedir ve beklenen çıktınız nedir? –

+1

Gösterilen örnekler için doğru cevapları alırsınız. int sadece 12'ye kadar faktörü tutabilir; '' uzun uzun'' 20 kadar faktoriyelleri tutabilirsiniz. 100'e kadar olan faktoriyelerini hesaplayabilmeniz gerekir! Bu bir kodlama alıştırmasıdır, ilkokul ders kitabınızı çarpma üzerine almanız ve bir dizi rakamı el ile çarpmanız gerekir. (Alternatif olarak, Python gibi yerel olarak bignumları destekleyen bir dil kullanın.) –

cevap

0

sorun, bu durum kullanıcıya kullanılarak veri türü ile. Yaklaşık 157 hane içeren 100 gibi sayıların faktörlerini saklamak için çok küçüktür. Haneleri saklamak için bir dizi kullanmanız gerekir. İşte benim problemim (yargıç tarafından kabul edilmiş olan).

#include<stdio.h> 

int main() 
{ 
    int t,j; 
    scanf("%d",&t); 
    while(t--) 
    { 
    int n; 
    scanf("%d",&n); 
    int a[1000] = {1}; 
    int m = 0; 
    int carry = 0; 
    for(int i=1; i<=n; i++) 
    { 
     for(j=0; j<=m; j++) 
     { 
     a[j] = (a[j]*i)+carry; 
     carry = a[j]/10; 
     a[j] = a[j]%10; 
     } 
     while(carry) 
     { 
     m++; 
     a[m] = carry%10; 
     carry/=10; 
     } 
    } 

    for(int i=m; i>=0; i--) 
     printf("%d",a[i]); 
    printf("\n"); 
    } 
    return 0; 
} 

Düzenleme: Ben yayınlanmıştır vardı orijinal kod C++ vardı; ama soru C olarak etiketlendiğinden, yukarıdaki kodu C'nin için düzenledim.

Bu yardımcı olur!

İlgili konular