转换器版本1.0和1.1

时间:2019-05-16 06:18:36

标签: c converters

我有两种用于数字转换器的代码-它们可用于数组

如何将数组作为一个结构或数字重用-目的是什么?

您知道在分析正交代码时是否存在其他数字系统的通用形式吗?

版本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;
}

0 个答案:

没有答案