如何修改动态变量的其中一位数?
一个一直变化的八位数,我想在需要的时候把从左到右其中的第三位改成5,该如何做到呢?[ 本帖最后由 飘逸的心 于 2011-6-21 17:24 编辑 ]
程序代码:#include <stdio.h>
#include <math.h>
// 从左住右,下标从0开始
void set(int *, int, int);
int get(int, int);
int main(void) {
int val = 1000000;
set(&val, 2, 5); // 把第三位的值改为5
printf("val : %d\n", val);
return 0;
}
int get(int dec, int index) {
int i = (int)ceil(pow(10, (int)log10(dec) - index));
return dec / i % 10;
}
void set(int * dec, int index, int value) {
int i = (int)ceil(pow(10, (int)log10(*dec) - index)), j;
j = get(*dec, index);
j *= i;
value *= i;
*dec -= j;
*dec += value;
} /* Output:
val : 1050000
Process returned 0 (0x0) execution time : 0.016 s
Press any key to continue.
*/

程序代码:#include <stdio.h>
#include <math.h>
int modify_nth_digit(int * n, int nth, int v) {
if (v < 0 || v > 9) {
return 1;
}
int i = (int) pow(10, nth - 1); // 这个多谢楼下指出。粗心了
*n = *n - ((*n / i) % 10) * i + v * i;
return 0;
}
int main() {
int n = 12345678;
printf("Originally, n = %d\n", n);
modify_nth_digit(&n, 5, 0); // 将变量 n 的第 5 位改为 0。整数的位数应该从右向左数,即个位为第 1 位,十位为第 2 位 ...
printf("After modifying the %dth digit to %d, n = %d\n", 5, 0, n);
return 0;
}