我有两种用于数字转换器的代码-它们可用于数组
如何将数组作为一个结构或数字重用-目的是什么?
您知道在分析正交代码时是否存在其他数字系统的通用形式吗?
版本1在计算数组大小时存在问题 版本2会精确计算表示值所需的数组大小-不需要pow函数-也是快速的模运算
版本1
#include <stdio.h>
#include <stdlib.h>
#define MAX_VALUE 100000000
struct resV {
int *rValue;
} rV;
struct prtV {
int *vSys;
} pV;
void fc_stdConv(int fValue, int fSys) {
int i1 = 0, i2 = 0, ctr = 0;
int res = fValue;
int fVal = fSys;
for(i1 = 0; (fVal <<= 1) <= (fValue - (fSys / 2) + 1); i1++) {
res = (int) (res / fSys);
fVal - (i1 + 1);
}
rV.rValue = (int *) malloc((i1 + fSys)*sizeof(int));
ctr = 0;
res = fValue; int val = 0;
for(i2 = (i1 + fSys) - (fSys -1); i2 >= 1; i2--) {
rV.rValue[i2] = (int) (res % fSys);
val = res;
res = (int) (res / fSys);
ctr++;
}
rV.rValue[0] = (int) (val / fSys);
for(i2 = 0; i2 <= ctr; i2++) {
fprintf(stdout, "%d_", rV.rValue[i2]);
}
}
int main(int argc, char *argv[])
{
int i1 = 0;
int mValue = 0;
int mSys = 0;
fprintf(stdout, "Geben Sie eine Ganzzahl ein und ein Convertierungssystem --> <int>,<int> \n");
fscanf(stdin, "%d,%d", &mValue, &mSys);
fc_stdConv( mValue, mSys);
free(rV.rValue);
system("PAUSE");
return EXIT_SUCCESS;
}
版本2
#include <stdlib.h>
#include <stdio.h>
#define MAX_UNIT 65536
#define MIN_UNIT 0
#define INF 0
struct rdigit {
int* rw;
}rD;
int calc_ln(int val, int sys);
void calc_digVal(int *rd, int sys, int val, int rn);
int main(int argc, char* argv[]) {
int i = 0;
int unit = INF;
int sys = INF;
int rn = 0;
fprintf_s(stdout, "Geben Sie eine Zahl zwischen %d und %d ein!\n", MIN_UNIT, MAX_UNIT);
fscanf_s(stdin, "%d", &unit);
while (unit < MIN_UNIT || unit > MAX_UNIT) {
fprintf_s(stdout, "Geben Sie eine Zahl zwischen %d und %d ein!\n", MIN_UNIT, MAX_UNIT);
fscanf_s(stdin, "%d", &unit);
}
fprintf_s(stdout, "Geben Sie ein Zahlensystem zwischen %d und %d ein!\n", MIN_UNIT, MAX_UNIT);
fscanf_s(stdin, "%d", &sys);
while (sys < MIN_UNIT || sys > MAX_UNIT) {
fprintf_s(stdout, "Geben Sie ein Zahlensystem zwischen %d und %d ein!\n", MIN_UNIT, MAX_UNIT);
fscanf_s(stdin, "%d", &sys);
}
if (sys == 1) {
rn = unit;
}
else if (sys > 1) {
rn = calc_ln(unit, sys);
}
rD.rw = (int*) malloc(rn * sizeof(int));
calc_digVal(rD.rw, sys, unit, rn);
for (i = 0; i < rn; i++) {
fprintf_s(stdout, "%d", rD.rw[i]);
}
free(rD.rw);
return 0;
}
void calc_digVal(int *rd, int sys, int val, int rn) {
int i = 0;
int j = 0;
int tmp = val;
int lRest = 0;
for (i = (rn - 1); i >= 0; i--) {
if (sys == 1) {
for (j = 0; j < val; j++) {
lRest = 1;
}
}
else if (sys > 1) {
lRest = tmp % sys;
}
rd[i] = lRest;
tmp /= sys;
}
}
int calc_ln(int val, int sys) {
int i = 0;
int ln = 0;
int tmp = val;
for (i = 0; tmp >= 1; i++) {
tmp /= sys;
}
ln = i;
return ln;
}