小白編程題:R進制轉X進制
描述
輸入一個R進制的數(shù)N,將它轉換成X進制的數(shù)。
輸入
輸入數(shù)據(jù)包含多個測試實例,對于每組測試用例:
分別輸入三個整數(shù):R(2 <= R <= 16), N (N的十進制 <= 10^9), X(2 <= X <= 16, X ≠ R) 。
輸出
輸出轉換后的數(shù),每個輸出占一行。
輸入樣例 1
11 A 10
2 1000 11
2 1111 12
輸出樣例 1
10
8
13
#include<stdio.h>
#include<string.h>
int ctoi(char c) {
if (c >= 48 && c <= 57)
return c - 48;
else if (c >= 65 && c <= 70)
return c - 65 + 10;
return 0;
}
char itoc(long long n){
if(n>=0&&n<10)
return n+48;
else if(n>=10&&n<=16)
return n+55;
return 0;
}
int main(){
//(N)R->(?)10
int r,x;
char n[10000];
while (scanf("%d %s %d", &r, n,&x) != EOF) {
if(n[0]==48){
printf("0\n");
continue;
}
long long len = strlen(n);
long long sum = 0;
int start = (n[0] == '-') ? 1 : 0;
for (long long i = start; i < len; i++) {
sum = sum * r + ctoi(n[i]);
}
if(x==10){
if (n[0] == '-') {
printf("%lld\n", -sum);
continue;
} else {
printf("%lld\n", sum);
continue;
}
}
//(N)10->(X)R
long long a[100]={0};
int i=0;
for(;sum!=0;i++){
a[i]=sum%x;
sum/=x;
}
char m[100]={'\0'};
for(int t=i-1,z=0;t>=0;t--,z++){
m[z]=itoc(a[t]);
}
if(n[0]==45){
printf("-");
}
puts(m);
}
return 0;
}

浙公網(wǎng)安備 33010602011771號