九度OJ-題目1508:把字串轉換成整數
阿新 • • 發佈:2019-02-11
題目連結地址:
題目描述:
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。
輸入:
輸入可能包含多個測試樣例。
對於每個測試案例,輸入為一個合法或者非法的字串,代表一個整數n(1<= n<=10000000)。
輸出:
對應每個測試案例,
若輸入為一個合法的字串(即代表一個整數),則輸出這個整數。
若輸入為一個非法的字串,則輸出“My God”。
樣例輸入:
5
-5
+8
樣例輸出:
5
-5
8
解題思路:
只有5 ,-5,+8,-0005,+00090這些型別的字串是合法的整數,其餘的都是非法的整數。
因此合法的整數必須同時滿足以下兩個條件:
(1)字串的第一個字元只能是0 ~ 9之間的數字或者正負號;
(2)字串中第一個字元之後的字元只能是0 ~ 9之間的數字。
AC程式碼如下:
#include<stdio.h> #include<string.h> /** * 將字串轉化為整數 * @param numberString 輸入的字串 * @param lenOfNumberString 輸入字串的長度 * @return void */ void stringToInt(char numberString[],int lenOfNumberString) { int i,start; int sign; // 表示符號位:正數為1,負數為-1 int countOfNumber; // 用於統計輸入字串中的數字個數 int number; // 轉化字串得到的整型數 if(numberString[0] < '0' && numberString[0] > '9' && numberString[i] != '+' && numberString[i] != '-') { printf("My God\n"); } else { start = 0; sign = 1; countOfNumber = 0; number = 0; // 如果前面有符號位,則對符號位進行處理 if('-' == numberString[0] || '+' == numberString[0]) { if('-' == numberString[0]) sign = -1; start++; } // 將字串中的數字轉化為整數 for(i = start;i < lenOfNumberString;i++) { if(numberString[i] >= '0' && numberString[i] <= '9') { number = 10 * number + (numberString[i] - '0'); countOfNumber++; } else { break; } } if(i >= lenOfNumberString - 1 && countOfNumber > 0) // 表示輸入的字串是一個合法的整數 { number = sign * number; printf("%d\n",number); } else // 表示輸入的字串不是合法的整數 { printf("My God\n"); } } } int main() { char numberString[1000]; int lenOfNumberString; while(gets(numberString)) { lenOfNumberString = strlen(numberString); stringToInt(numberString,lenOfNumberString); } return 0; } /************************************************************** Problem: 1508 User: blueshell Language: C Result: Accepted Time:0 ms Memory:912 kb ****************************************************************/