写浮点制进制转换的时候,oj平台编译怎么老是报错过不了啊,本地跑的时候过的挺好的
给学长哥看看我的破烂代码,浮点制转换那个是看你的,然后整数那个是我自己写的:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
void intreverse(char C[100], char arr[100], int A, int B)
{
//转化十进制:
int count = 0, sum = 0, l = 0;
while (C[count] != '.')
{
count++;
}
int i = count - 1, j = 0;
while (i > -1)
{
if (C[i] >= 48 && C[i] <= 57)
sum += pow(A, j++) * (C[i--] - 48);
else
sum += pow(A, j++) * (C[i--] - 87);
}
i = 0;
if (sum == 0)
{
arr[i++] = '0';
}
while (sum)
{
if ((sum % B) >= 0 && (sum % B) <= 9)
{
arr[i++] = sum % B + 48;
sum /= B;
}
else
{
arr[i++] = sum % B + 87;
sum /= B;
}
}
arr[i] = '.';
int r = --i;
while (r > l)
{
char temp = arr[r];
arr[r--] = arr[l];
arr[l++] = temp;
}
}
void doublereverse(char C[100], char arr[100], int A, int B)
{
int count = 0,sz;
double sum = 0.0;
while (C[count++] != '.')
{
;
}
int i = count, j = -1;
while (i <= strlen(C) - 1)
{
if (C[i] >= 48 && C[i] <= 57)
sum += pow(A, j--) * (C[i++] - 48);
else
sum += pow(A, j--) * (C[i++] - 87);
}
count = 0;
while (arr[count++] != '.')
{
;
}
if (sum == 0)
{
arr[count] = '0';
}
int ret = count;
while (sum!=0)
{
sz = sum * B;
if (sz > 9)
{
arr[count++] = sz + 87;
sum = sum * B - sz;
}
else
{
arr[count++] = sz + 48;
sum = sum * B - sz;
}
}
for (i = 0; i <ret + 8; i++)
{
printf("%c", arr[i]);
}
}
char* convert_base(char* C, int A, int B) {
// 将 A 进制的数 C 转换为十进制数 D
int decimal_value = 0;
int length = strlen(C);
for (int i = 0; i < length; i++) {
int digit_value = 0;
if (C[i] >= '0' && C[i] <= '9') {
digit_value = C[i] - '0';
} else if (C[i] >= 'a' && C[i] <= 'z') {
digit_value = C[i] - 'a' + 10;
} else {
printf("Invalid input\n");
return NULL;
}
if (digit_value >= A) {
printf("Invalid input\n");
return NULL;
}
decimal_value = decimal_value * A + digit_value;
}
// 将十进制数 D 转换为 B 进制的数
int max_digits = 11; // 最大长度为 10 位(根据题目要求修改)
char* result = (char*)malloc((max_digits+1) * sizeof(char)); // +1 是为了存储字符串结束符 '\0'
int i = max_digits - 1; // 从最后一位开始填充
while (decimal_value > 0 && i >= 0) {
int remainder = decimal_value % B;
if (remainder < 10) {
result[i] = remainder + '0';
} else {
result[i] = remainder - 10 + 'a'; // 将大于等于 10 的余数转换为小写字母
}
decimal_value /= B;
i--;
}
if (i < 0) {
printf("Result exceeds maximum length\n");
free(result);
return NULL;
}
// 将结果复制到新的内存空间中,并添加字符串结束符
char* final_result = (char*)malloc((max_digits-i) * sizeof(char));
strcpy(final_result, result+i+1);
free(result);
return final_result;
}
int main()
{
int A, B;
char C[100], arr[100];
int i = 0;
scanf("%d %d %s", &A, &B, C);
memset(arr, 0, sizeof(char[100]));
int tmp = strcspn(C,".");
if(tmp == strlen(C)){
char* result = convert_base(C, A, B);
if (result != NULL) {
printf("%s\n", result);
free(result);
}
}
else{
intreverse(C, arr, A, B);
doublereverse(C, arr, A, B);
}
}