#15269: WA (Line:104) 請問是哪邊錯?


orertrr (宏)

學校 : 國立彰化師範大學附屬高級工業職業學校
編號 : 72363
來源 : [123.194.101.86]
最後登入時間 :
2022-10-04 21:30:34
d361. 10515 - Power et al. -- UVa10515 | From: [114.38.154.12] | 發表日期 : 2018-09-24 11:08

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;
int convert(char*); //取最後兩個數字

int main()
{
    char a[100],b[100];
    int m,n;
    while(cin>>a>>b)
    {
        if(a[0]=='0'&&b[0]=='0')
            break;
        m=convert(a)%10;
        n=(convert(b)-1)%4+1;
        if(m==1||n==0)
            cout<<1<<endl;
        else if(m==0)
            cout<<0<<endl;
        else
        {
            cout<<int(pow(m,n))%10<<endl;
        }
        memset(a, '\0', sizeof(a));
        memset(b, '\0', sizeof(b));
    }
        return 0;
}

int convert(char x[])
{
    int s=strlen(x),a;
    if(s>1)
    {
        a=(x[s-2]-'0')*10+x[s-1]-'0';
    }
    else
        a=x[s-1]-'0';
    return a;
}

 

程式碼如上

最後結果出來是

我的答案為1

正確答案為0

 

由於實在想不出來為什麼

只好放上來請教大家

謝謝

 
#15677: Re:WA (Line:104) 請問是哪邊錯?


Yunyung (Yunyung)

學校 : 不指定學校
編號 : 61466
來源 : [1.168.188.176]
最後登入時間 :
2018-11-18 02:56:02
d361. 10515 - Power et al. -- UVa10515 | From: [111.246.136.242] | 發表日期 : 2018-10-20 17:50

#include
#include
#include

using namespace std;
int convert(char*); //取最後兩個數字

int main()
{
    char a[100],b[100];
    int m,n;
    while(cin>>a>>b)
    {
        if(a[0]=='0'&&b[0]=='0')
            break;
        m=convert(a)%10;
        n=(convert(b)-1)%4+1;
        if(m==1||n==0)
            cout<<1<<endl;
        else if(m==0)
            cout<<0<<endl;
        else
        {
            cout<<int(pow(m,n))%10<<endl;
        }
        memset(a, '\0', sizeof(a));
        memset(b, '\0', sizeof(b));
    }
        return 0;
}

int convert(char x[])
{
    int s=strlen(x),a;
    if(s>1)
    {
        a=(x[s-2]-'0')*10+x[s-1]-'0';
    }
    else
        a=x[s-1]-'0';
    return a;
}

 

程式碼如上

最後結果出來是

我的答案為1

正確答案為0

 

由於實在想不出來為什麼

只好放上來請教大家

謝謝

HI 我照著你邏輯寫 這樣正確

#include <iostream>

#include <string>

#include <cmath>

using namespace std;

int cutDigit(string input);

 

int main()

{

    string m, n;

    while (cin >> m >> n)

    {

        int a, b;

        a = cutDigit(m) % 10;

        b = cutDigit(n);

        if (a == 0 && b == 0 && m.length() == 1 && n.length() == 1)

            break;

        else if (a == 0)

        {

            cout << 0 << endl;

            continue;

        }

        else if (b == 0)

        {

            cout << 1 << endl;

            continue;

        }

 

        b = ((b - 1) % 4) + 1;

        cout << (int)pow(a, b) % 10<< endl;

 

 

    }

}

 

int cutDigit(string input)

{

    int len = input.length();

    if (len == 1)

        return input[len - 1] - '0';

    else

        return ( (input[len - 2] - '0') * 10 )  + ( (input[len - 1]) - '0');

}



 
#15679: Re:WA (Line:104) 請問是哪邊錯?


Yunyung (Yunyung)

學校 : 不指定學校
編號 : 61466
來源 : [1.168.188.176]
最後登入時間 :
2018-11-18 02:56:02
d361. 10515 - Power et al. -- UVa10515 | From: [111.246.136.242] | 發表日期 : 2018-10-20 17:53

 

HI 我照著你邏輯寫 這樣正確 主要是判斷錯誤 

 if (a == 0 && b == 0 && m.length() == 1 && n.length() == 1) 這段 你直接判斷a[0] b[0]會錯 ex:輸入為 100 100

#include

#include

#include

using namespace std;

int cutDigit(string input);

 

int main()

{

    string m, n;

    while (cin >> m >> n)

    {

        int a, b;

        a = cutDigit(m) % 10;

        b = cutDigit(n);

        if (a == 0 && b == 0 && m.length() == 1 && n.length() == 1)

            break;

        else if (a == 0)

        {

            cout << 0 << endl;

            continue;

        }

        else if (b == 0)

        {

            cout << 1 << endl;

            continue;

        }

 

        b = ((b - 1) % 4) + 1;

        cout << (int)pow(a, b) % 10<< endl;

 

 

    }

}

 

int cutDigit(string input)

{

    int len = input.length();

    if (len == 1)

        return input[len - 1] - '0';

    else

        return ( (input[len - 2] - '0') * 10 )  + ( (input[len - 1]) - '0');

}






 
#15680: Re:WA (Line:104) 請問是哪邊錯?


Yunyung (Yunyung)

學校 : 不指定學校
編號 : 61466
來源 : [1.168.188.176]
最後登入時間 :
2018-11-18 02:56:02
d361. 10515 - Power et al. -- UVa10515 | From: [111.246.136.242] | 發表日期 : 2018-10-20 17:57

if(a[0]=='0'&&b[0]=='0')
            break;

會錯應該是這個判斷 ex: 輸入為100 100 並非要跳出

 

if(m==1||n==0)    <<  應該要用&&
         cout<<1<<endl;  
else if(m==0)
         cout<<0<<endl;

 
#15684: Re:WA (Line:104) 請問是哪邊錯?


Yunyung (Yunyung)

學校 : 不指定學校
編號 : 61466
來源 : [1.168.188.176]
最後登入時間 :
2018-11-18 02:56:02
d361. 10515 - Power et al. -- UVa10515 | From: [111.246.136.242] | 發表日期 : 2018-10-20 20:04


        if(a[0]=='0'&&b[0]=='0')
            break;



更正 我腦殘想錯了 這段沒錯 整數開頭不會是0

 
ZeroJudge Forum