如何修改动态变量的其中一位数?
一个一直变化的八位数,我想在需要的时候把从左到右其中的第三位改成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; }