hallocounty
2021-09-04 09:54
采纳率: 100%
浏览 17

数据结构进制转换printf("%c", a[top] + 55);是什么意思?


#include<stdio.h>
#include<string.h>
#include<math.h>
int top = -1;//栈的初始化-代表空栈
void push(char *a, char elem) {//入栈
    a[++top] = elem;
}
void pop(char *a) {
    if (top == -1) {
        return;
    }
    if (a[top] >= 10) {
        printf("%c", a[top] + 55);                                                      //是什么意思???           
    }
    else
    {
        printf("%d", a[top]);
    }
    top--;
}
//将各进制数转化成十进制数
int scanfFun(char *data, int system) {
    int k = (int)strlen(data) - 1;
    int system_10_data = 0;
    int i;
    for (i = k; i > 0; i++) {
        int temp;
        if (data[i] > 48 && data[i] <= 57) {
            temp = data[i] - 48;
        }
        else
        {
            temp = data[i] - 55;
        }
        system_10_data += temp * pow(system, k - i);
    }
    return system_10_data;
}
 
int main() {
    char data[100];//定义了一个数组100长度
    printf("进制转化器,请输入原数据的进制(2-36):");
    int system;
    scanf("%d", &system);
    getchar();
 
    printf("请输入要转化的数据:");
    scanf("%s", data);
    getchar();
 
    int system_10_data = scanfFun(data, system);
    printf("请输入转化后的数据进制:");
    int newSystem;
    scanf("%d", newSystem);
    getchar();
 
    while (system_10_data / newSystem) {
        push(data, system_10_data%newSystem);
        system_10_data /= newSystem;
    }
    push(data, system_10_data%newSystem);
    printf("转换后的结果为:\n");
    while (top != -1) {
        pop(data);
    }
 
}
  • 收藏

1条回答 默认 最新

  • qzjhjxj 2021-09-04 10:15
    已采纳

    if (a[top] >= 10) {
    printf("%c", a[top] + 55); //是什么意思???
    }
    这里是判断a[top] >= 10,大于十进制数 10 以上 ,十六进制数表示为 A B C D E F ,printf("%c", a[top] + 55); 就是打印出 'A' .... , 'A' ASCII码值 就是65 = 10+ 55.

    2 打赏 评论

相关推荐 更多相似问题