因此,假设输入为4 5 3 9 2.56,输出必须为4 9 3 5 2.56。 我怎么能用C编程?
答案 0 :(得分:1)
sprintf
函数。atof
函数。答案 1 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
int dotPos(char arr[]) {
int i = 0;
while (arr[++i] != '.');
return i;
}
int main() {
double d = 45392.56;
int MAX = 100;
char arr[MAX];
sprintf(arr, "%f", d);
if (dotPos(arr) > 3) {
char aux = arr[1];
arr[1] = arr[3];
arr[3] = aux;
}
d = atof(arr);
printf("%.2f\n", d);
}
输出:
49352.56
答案 2 :(得分:1)
避免转换为字符串和返回,取数字的整数部分,找到位置1和3中的两个值(十进制表示法),并计算要添加到原始双精度值或从原始双精度值减去的值。
这是outlierindex = find(cellfun(@(x) x > 25, groundtruth))
(a-b) *pow(10,hipos) - (a-b) * pow(10,lopos)
BTW:对于整数部分大于最大log int的值,例如#include <stdio.h>
long finddiff(unsigned long val, unsigned lpos, unsigned rpos);
int main(void) {
double d = 45392.56;
unsigned long u;
long dif;
u = d;
dif = finddiff(u,3,1);
d += dif;
printf("%.2f\n", d);
return 0;
}
long finddiff(unsigned long val, unsigned lpos, unsigned rpos)
{
long res;
unsigned pos, ll, rr;
if (lpos < rpos) return finddiff(val, rpos,lpos);
for (pos=0; pos < rpos; pos++) { val /= 10; }
rr = val %10;
for (; pos < lpos; pos++) { val /= 10; }
ll = val %10;
// fprintf(stderr, "%u,%u\n", ll,rr);
res = rr-ll;
for (; pos > rpos; pos--) { res *= 10; }
res -= rr-ll;
for (; pos > 0; pos--) { res *= 10; }
// fprintf(stderr, "%u,%u,%ld\n", ll,rr, res);
if (ll > rr) res = -res;
else if (rr > ll) {;}
else res = 0;
return res;
}
,这将失败。
对于负数,应该添加一些额外的逻辑。