天天看點

PTA6-26 字元串轉換成十進制整數 (15分)

PTA6-26 字元串轉換成十進制整數 (15分)
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    char c;
    int i;
    int j = 0,l = 0;
    int a[1000]={0};//開個1000的整數數組用來存數
    for(i = 0;;i++){
        c=getchar();//接受輸入的字元
        if(c == '#')break;//當接收到#退出循環
        if(c == '-'&&j == 0&&l == 0){//當無整數存入數組a中并且得到- j自加
            j++;
        }
        switch(c){//根據字元給數組指派
        case'0':
                a[l]=0;
                l++;
                break;
        case'1':
                a[l]=1;
                l++;
                break;
        case'2':
                a[l]=2;
                l++;
                break;
        case'3':
                a[l]=3;
                l++;
                break;
        case'4':
                a[l]=4;
                l++;
                break;
        case'5':
                a[l]=5;
                l++;
                break;
        case'6':
                a[l]=6;
                l++;
                break;
        case'7':
                a[l]=7;
                l++;
                break;
        case'8':
                a[l]=8;
                l++;
                break;
        case'9':
                a[l]=9;
                l++;
                break;
        case'A':
                a[l]=10;
                l++;
                break;
        case'a':
                a[l]=10;
                l++;
                break;
        case'B':
                a[l]=11;
                l++;
                break;
        case'b':
                a[l]=11;
                l++;
                break;
        case'C':
                a[l]=12;
                l++;
                break;
        case'c':
                a[l]=12;
                l++;
                break;
        case'D':
                a[l]=13;
                l++;
                break;
        case'd':
                a[l]=13;
                l++;
                break;
        case'E':
                a[l]=14;
                l++;
                break;
        case'e':
                a[l]=14;
                l++;
                break;
        case'F':
                a[l]=15;
                l++;
                break;
         case'f':
                a[l]=15;
                l++;
                break;
                }
    }
    int sum = 0;
    l=l-1;//因為得到最後一個整數時,l做了自加運算,是以l需要減1
    int p = 1; 
    for(;l >= 0; l--){//從後往前周遊數組
        sum+=p*a[l];
        p=p*16;
    }
    if(j == 0)printf("%d",sum);//無負号
    if(j != 0 && sum != 0)//有負号并且加和不等于0
        printf("-%d",sum);
    if(j != 0&&sum == 0)printf("0");有負号并且加和等于0
    return 0;
}

           
pta