2014-01-23 2 views
0

Ссылки на проблему Spoj LastDigit problemSPOJ LastDigit Неправильного ответа

Я проверил мой код на моей машине, но в SPOJ она показывает неправильный ответ. Вот мой код-

#include<stdio.h> 
int main() 
{ 
int num=0; 
scanf("%d",&num); 
while(num--) 
{  
    int a=0; 
    unsigned long int b; 
    scanf("%d\t%lu",&a,&b); 
    a%=10; 
    b%=100; 
    if(a==0||a==1) 
    printf("%d\n",a); 
    else if(b==0) 
    printf("1\n"); 
    else if(a==5) 
    printf("5\n"); 
    else 
    { 
    int d=b%4,e=1; 
    while(d--) 
     e*=a;  
    printf("%d\n",e%10);   
    } 
} 
return 0; 
} 

ответ

5

Ваша программа глючит. Вы принимаете цикл длиной 4 для всех цифр, кроме 0,1,5. Это неправильно

Например, рассмотрим ввод

1 
2 4

Ваша программа выводит

1
тогда ответ должен быть последней цифры мощности (2,4) = последняя цифра 16 =

+1

Я сделал изменение, что если (d == 0) d = 4, он решил проблему. Спасибо. –

2

В SPOJ вы получаете WA, потому что ваша программа используется для вычисления последней цифры не очень большого числа. В этой проблеме четко указано, что значение «b» находится между «0» и «2 147 483 000» включительно. Правильный способ решения проблемы - использование модульной экспоненциальности.

0
@ Wasim Thabraze I used the modular approach but my solution is not accepted because   
    my solution is taking more than than 700bytes 
    #include<iostream> 
    using namespace std; 
    int lastdigit(int a,long int b); 
    int main() 
    { 
    int t,a; 
    long int b; 
    cin>>t; 
    while(t--) 
    { 
    cin>>a>>b; 
    cout<<lastdigit(a,b)<<"\n"; 
    } 
    return 0; 
    } 
    int lastdigit(int a,long int b) 
    {  if(b==0){return 1;} 
    if(a%10==0){return 0;} 
    if(a%10==1){return 1;} 
    if(a%10==5){return 5;} 
    if(a%10==6){return 6;} 
    int ret,mod=b%4; 
    if(a%10==2||a%10==8||a%10==4) 
    { 
    if(a%10==8){if(mod==1){mod=3;}else if(mod==3){mod=1;}} 
    if(a%10==4){if(mod==1||mod==3){mod=2;}else if(mod==2){mod=0;}} 
    if(mod==1){ret= 2;} 
    else if(mod==2){ret =4;} 
    else if(mod==3){ret =8;} 
    else if(mod==0){ret= 6;} 
    } 
    else if(a%10==3||a%10==7||a%10==9) 
    { 
    if(a%10==7){if(mod==1){mod=3;}else if(mod==3){mod=1;}} 
    if(a%10==9){if(mod==1||mod==3){mod=2;}else if(mod==2){mod=0;}} 
    if(mod==1){ret= 3;} 
    else if(mod==2){ret= 9;} 
    else if(mod==3){ret= 7;} 
    else if(mod==0){ret= 1;} 
    } 

    return ret; 
    } 
Смежные вопросы