优化这段代码 int SerialAdd(int serialid,int i,int j) { float val; val = gRunPara.COMMS_SerialInfo[serialid][i].val; if (j == 0) { val += pow(10,0); } else { if (val < 10) { if (j== 1) val += pow(10,j-1); } else if (val >= 10 && val < 100) { if (j== 1) val += pow(10,j); else if (j== 2) val += pow(10,j-2); } else if (val >= 100 && val < 1000) { if (j== 1) val += pow(10,j+1); else if (j== 2) val += pow(10,j-1); else if (j== 3) val += pow(10,j-3); } else if (val >= 1000 && val < 10000) { if (j== 1) val += pow(10,j+2); else if (j== 2) val += pow(10,j); else if (j== 3) val += pow(10,j-2); else if (j== 4) val += pow(10,j-4); } else if (val >= 10000 && val < 100000) { if (j== 1) val += pow(10,j+3); else if (j== 2) val += pow(10,j+1); else if (j== 3) val += pow(10,j-1); else if (j== 4) val += pow(10,j-3); else if (j== 5) val += pow(10,j-5); } else if (val >= 100000 && val < 999999) { if (j== 1) val += pow(10,j+4); else if (j== 2) val += pow(10,j+2); else if (j== 3) val += pow(10,j); else if (j== 4) val += pow(10,j-2); else if (j== 5) val += pow(10,j-4); else if (j== 6) val += pow(10,j-6); } } gRunPara.COMMS_SerialInfo[serialid][i].val = val; }
时间: 2023-07-15 21:15:45 浏览: 106
这段代码的逻辑判断比较复杂,可以考虑使用数组来简化代码。
首先,可以定义一个数组来存储每个数值范围对应的幂次方值:
```
int pow_arr[] = {0, 1, 10, 100, 1000, 10000, 100000};
```
然后,可以根据当前值的范围来计算出需要加的幂次方值的下标:
```
int idx = 0;
if (val >= 10) idx++;
if (val >= 100) idx++;
if (val >= 1000) idx++;
if (val >= 10000) idx++;
if (val >= 100000) idx++;
```
最后,可以根据传入的参数 `j` 来得到需要加的幂次方值的下标 `add_idx`:
```
int add_idx = idx + j;
```
最后,可以使用数组来简化代码:
```
int SerialAdd(int serialid, int i, int j) {
float val = gRunPara.COMMS_SerialInfo[serialid][i].val;
int pow_arr[] = {0, 1, 10, 100, 1000, 10000, 100000};
int idx = 0;
if (val >= 10) idx++;
if (val >= 100) idx++;
if (val >= 1000) idx++;
if (val >= 10000) idx++;
if (val >= 100000) idx++;
int add_idx = idx + j;
if (add_idx >= 7) {
val += pow(10, add_idx);
} else {
val += pow_arr[add_idx];
}
gRunPara.COMMS_SerialInfo[serialid][i].val = val;
}
```
阅读全文