Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #define N 14
- unsigned long long int InTen (int len, int b1, char num[], int dot){
- int i = 0, n = 0;
- long long ten = 0;
- if (dot == -1)
- for (i = 0 ; i < len; i++) {
- if (num[i] >= '0' && num[i] <= '9') n = num[i] - '0';
- if (num[i] >= 'A' && num[i] <= 'F') n = num[i] - 'A' + 10;
- ten = ten * b1 + n;
- }
- else
- for (i = 0; i < dot; i++){
- if (num[i] >= '0' && num[i] <= '9') n = num[i] - '0';
- if (num[i] >= 'A' && num[i] <= 'F') n = num[i] - 'A' + 10;
- ten = ten * b1 + n;
- }
- return ten;
- }
- void OutTen (long long ten, int b2){
- char st[49];
- int i=0;
- while (ten >= b2) {
- if (ten % b2 <= 9) st[i] = ten % b2 + '0';
- if (ten % b2 >= 10 && ten % b2 <= 15) st[i] = ten % b2 - 10 + 'A';
- ten /= b2;
- i++;
- }
- if (ten < 10) st[i] = ten + '0';
- if (ten > 9 && ten < 16) st[i] = ten + 'A' - 10;
- for (; i>=0; i--) printf("%c", st[i]);
- }
- double InTenDot(int len, char num[], int dot, int b1){
- int i;
- int digit =0;
- double ten_float = 0;
- for (i = len - 1; i > dot; i--){
- if (num[i] >= '0' && num[i] <= '9') digit = num[i] - '0';
- if (num[i] >= 'A' && num[i] <= 'F') digit = num[i] - 'A' + 10;
- ten_float = (ten_float + digit) / b1;
- }
- return ten_float;
- }
- void OutTenDot (double ten_float, int b2){
- int i, k = 0;
- char st[12];
- for (i = 0; i < 12; i++){
- int digit = ten_float * b2;
- if (digit >= 0 && digit <= 9) st[i] = digit + '0';
- if (digit >= 10 && digit <= 15) st[i] = digit - 10 + 'A';
- ten_float = ten_float * b2 - digit;
- if (ten_float != 0 && i != 11) k++;
- }
- printf(".");
- for (i = 0; i <= k; i++) printf("%c", st[i]);
- }
- int main() {
- int b1,b2, dot=-1, i=0, j=0;
- char num[N];
- if (scanf("%d %d %13s",&b1, &b2, num)==1){ }
- if ((b1 > 16) || (b1 < 2) || (b2 < 2) || (b2 > 16)) {
- puts("bad input");
- return 0;
- }
- int len = strlen(num);
- for (i=0; i<len; i++){
- num[i]=toupper(num[i]);
- }
- char el[17] = "0123456789ABCDEF";
- for (i=0; i<len; i++){
- for (j=0; j<b1; j++){
- if (num[i]== el[j])
- break;
- if (num[i]=='.' && dot==-1){
- dot=i;
- break;
- }
- if (j==(b1-1)){
- puts("bad input");
- return 0;
- }
- }
- }
- if (dot == 0 || len == dot + 1) {
- puts("bad input");
- return 0;
- }
- OutTen(InTen(len, b1, num, dot), b2);
- OutTenDot(InTenDot(len, num, dot, b1), b2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement