N-43. 简单进制转换
放在c语言课上也是水题
题目描述:
进位制在生活中的运用非常频繁,比方说7进制,10进制,还有60进制等,下面请聪明的你对于简单的2-16进制的数字进行运算。
我们将给出每一组的数据和对应的进制,请你将数据转化为十进制,并按照先进制(由大到小)后大小(由大到小)的顺序排列出来。
注:在11 ~ 16进制中,a ~ f分别表示10 ~ 15。
输入格式:
第1行输入数据的组数n
第2~n+1行,每一行输入一个字符串一个整数。代表数字及其进制。
输出格式:
第1~n行,每一行输出两个整数。前一个代表数值的十进制,后一个代表它原有的进制。
进行两次冒泡排序即可,先比较进制大小,再比较数大小
记得开long long
#include <stdio.h>  
#include <math.h>  
#include <string.h>  
#define ll long long  
char ch[110][10];  
int a[110]; ll ans[110] = {0};  
int main () {  
    int n;  
    scanf("%d", &n);  
    for (int i = 1; i <= n; i++) scanf("%s%d", ch[i], &a[i]);  
    for (int i = 1; i <= n; i++) {  
        for (int j = strlen(ch[i]) - 1; j >= 0; j--) {  
            if (ch[i][j] >='a' && ch[i][j] <= 'j') ans[i] += (ch[i][j] - 'a' + 10) * pow(a[i], strlen(ch[i]) - 1 - j);  
            else ans[i] += (ch[i][j] - '0') * pow(a[i], strlen(ch[i]) - 1 - j);  
        }  
    }  
    for (int i = 1; i <= n ; i++) {  
        for (int j = 1; j < n; j++) {  
            if (a[j] < a[j + 1]) {  
                int temp1 = ans[j], temp2 = a[j];  
                ans[j] = ans[j + 1], a[j] = a[j + 1];  
                ans[j + 1] = temp1, a[j + 1] = temp2;  
            }  
        }  
    }  
    for (int i = 1; i <= n; i++) {  
        for (int j = 1; j < n; j++) {  
            if (a[j] == a[j + 1] && ans[j] < ans[j + 1]) {  
                int temp1 = ans[j], temp2 = a[j];  
                ans[j] = ans[j + 1], a[j] = a[j + 1];  
                ans[j + 1] = temp1, a[j + 1] = temp2;  
            }   
        }  
    }  
    for (int i = 1; i <= n; i++) printf("%lld %d\n", ans[i], a[i]);  
    return 0;  
}  
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号