#28347: 請問我這樣的寫法哪有誤?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
c089. 00389 - Basically Speaking -- UVa389 | From: [140.124.249.31] | 發表日期 : 2021-12-01 20:43

#include<stdio.h>

#include<string.h>

int main(){

    char str[999];

    int change, digit; // change:轉換數字的單位; digit:轉換成幾進位制

    while(scanf("%s %d %d", &str, &change, &digit) != EOF){

        int number = 0, exp = 1; // num:儲存轉換的數字 exp:位數

        for(int i = strlen(str) - 1; i >= 0; i--){

            if(str[i] >= '0' && str[i] <= '9'){

                number = number + (str[i] - '0') * exp;//轉成int型別的數字

            }

            else if(str[i] == 'A'){

                number = number + 10 * exp;

            }

            else if(str[i] == 'B'){

                number = number + 11 * exp;

            }

            else if(str[i] == 'C'){

                number = number + 12 * exp;

            }

            else if(str[i] == 'D'){

                number = number + 13 * exp;

            }

            else if(str[i] == 'E'){

                number = number + 14 * exp;

            }

            else if(str[i] == 'F'){

                number = number + 15 * exp;

            }

            exp = exp * change;

        }

        char ans[100];

        int index = 0;//表示位數中第幾個位置

        while(number > 0){//取數值中每個位數值 

            int temp = number % digit;

            number = number / digit;

        //轉型成char型別 

        if(temp < 10){

            ans[index] = temp + '0';

        }

        else if(temp == 10){

            ans[index] = 'A';

        }

        else if(temp == 11){

            ans[index] = 'B';

        }

        else if(temp == 12){

            ans[index] = 'C';

        }

        else if(temp == 13){

            ans[index] = 'D';

        }

        else if(temp == 14){

            ans[index] = 'E';

        }

        else if(temp == 15){

            ans[index] = 'F';

        }

         index++;

       }

       if(index >= 7){

           printf("  ERROR\n");

       }

       else{

           for(int j = 6; j >= 0; j--){

               printf("%c", ans[j]);

           }

           printf("\n");

       }

    }

}

不知道為何格式會跑掉,請問要如何改?

#0: 100% WA (line:1)

您的答案為: 11110
正確答案為: 11110
 
#28348: Re:請問我這樣的寫法哪有誤?


linlincaleb@gmail.com (臨末之頌)

學校 : 新北市立板橋高級中學
編號 : 132772
來源 : [111.248.111.135]
最後登入時間 :
2023-04-01 22:41:13
c089. 00389 - Basically Speaking -- UVa389 | From: [111.248.151.77] | 發表日期 : 2021-12-01 20:58

#include

#include

int main(){

    char str[999];

    int change, digit; // change:轉換數字的單位; digit:轉換成幾進位制

    while(scanf("%s %d %d", &str, &change, &digit) != EOF){

        int number = 0, exp = 1; // num:儲存轉換的數字 exp:位數

        for(int i = strlen(str) - 1; i >= 0; i--){

            if(str[i] >= '0' && str[i] <= '9'){

                number = number + (str[i] - '0') * exp;//轉成int型別的數字

            }

            else if(str[i] == 'A'){

                number = number + 10 * exp;

            }

            else if(str[i] == 'B'){

                number = number + 11 * exp;

            }

            else if(str[i] == 'C'){

                number = number + 12 * exp;

            }

            else if(str[i] == 'D'){

                number = number + 13 * exp;

            }

            else if(str[i] == 'E'){

                number = number + 14 * exp;

            }

            else if(str[i] == 'F'){

                number = number + 15 * exp;

            }

            exp = exp * change;

        }

        char ans[100];

        int index = 0;//表示位數中第幾個位置

        while(number > 0){//取數值中每個位數值 

            int temp = number % digit;

            number = number / digit;

        //轉型成char型別 

        if(temp < 10){

            ans[index] = temp + '0';

        }

        else if(temp == 10){

            ans[index] = 'A';

        }

        else if(temp == 11){

            ans[index] = 'B';

        }

        else if(temp == 12){

            ans[index] = 'C';

        }

        else if(temp == 13){

            ans[index] = 'D';

        }

        else if(temp == 14){

            ans[index] = 'E';

        }

        else if(temp == 15){

            ans[index] = 'F';

        }

         index++;

       }

       if(index >= 7){

           printf("  ERROR\n");

       }

       else{

           for(int j = 6; j >= 0; j--){

               printf("%c", ans[j]);

           }

           printf("\n");

       }

    }

}

不知道為何格式會跑掉,請問要如何改?

#0: 100% WA (line:1)

您的答案為: 11110
正確答案為: 11110

484答案少一個空白阿

 
#28349: Re:請問我這樣的寫法哪有誤?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
c089. 00389 - Basically Speaking -- UVa389 | From: [39.12.131.96] | 發表日期 : 2021-12-01 21:32


        char ans[100];


       if(index >= 7){


1. 你的ans沒有初始化(可以用memset)

2. 長度剛好7是可以的,要改成index > 7

 
#28355: Re:請問我這樣的寫法哪有誤?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
c089. 00389 - Basically Speaking -- UVa389 | From: [140.124.249.31] | 發表日期 : 2021-12-02 15:53


        char ans[100];


       if(index >= 7){


1. 你的ans沒有初始化(可以用memset)

2. 長度剛好7是可以的,要改成index > 7


謝謝兩位,我改寫了,但還是有錯。(#WA:line 104)

#0: 100% WA (line:104)

您的答案為: ERROR
正確答案為: 3330001

#include<stdio.h> #include<string.h> int main(){ char str[999]; int change, digit; //change:轉換數字的單位; digit:轉換成幾進位制 memset(str, 0, sizeof(str));//初始化為0 while(scanf("%s %d %d", &str, &change, & digit)!= EOF){ int number = 0, exp = 1; // num:儲存轉換的數字 exp:位數 for(int i = strlen(str) - 1; i >= 0; i--){ //轉成int型別的數字,並加總 if(str[i] >= '0' && str[i] <= '9'){ number = number + (str[i] - '0') * exp; } else if(str[i] == 'A'){ number = number + 10 * exp; } else if(str[i] == 'B'){ number = number + 11 * exp; } else if(str[i] == 'C'){ number = number + 12 * exp; } else if(str[i] == 'D'){ number = number + 13 * exp; } else if(str[i] == 'E'){ number = number + 14 * exp; } else if(str[i] == 'F'){ number = number + 15 * exp; } exp = exp * change; } char ans[100]; memset(ans, 0, sizeof(ans));//初始化為0 int index = 1;//表示位數中第幾個位置 while(number > 0){//取數值中每個位數值 int temp = number % digit; number = number / digit; //轉型成char型別 if(temp >= 0 && temp <= 9){ ans[index] = temp + '0'; } else if(temp == 10){ ans[index] = 'A'; } else if(temp == 11){ ans[index] = 'B'; } else if(temp == 12){ ans[index] = 'C'; } else if(temp == 13){ ans[index] = 'D'; } else if(temp == 14){ ans[index] = 'E'; } else if(temp == 15){ ans[index] = 'F'; } index++; } if(index > 7){ printf("ERROR\n"); } else{ for(int i = 6; i >= 0; i--){ printf("%c", ans[i]); } printf("\n"); } } }
 
#28357: Re:請問我這樣的寫法哪有誤?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
c089. 00389 - Basically Speaking -- UVa389 | From: [39.12.131.96] | 發表日期 : 2021-12-02 18:32

		int index = 1;//表示位數中第幾個位置


改回index = 0就好了

 
#28358: Re:請問我這樣的寫法哪有誤?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
c089. 00389 - Basically Speaking -- UVa389 | From: [123.194.107.200] | 發表日期 : 2021-12-02 23:37

		int index = 1;//表示位數中第幾個位置


改回index = 0就好了


ok了,謝謝你!

 
ZeroJudge Forum