1、遍历数组及数据转换
输入一个十进制正整数,并将其转转换成十六进制数输出。不能使用%x
输出,代码如下,
#include <stdio.h> int main() { int num = 0; int a[100]; int i = 0; int m = 0; int yushu; char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; printf( "请输入一个十进制整数:" ); scanf( "%d", &num ); while ( num > 0 ) { yushu = num % 16; a[i++] = yushu; num = num / 16; } printf( "转化为十六进制的数为:0x" ); for ( i = i - 1; i >= 0; i-- ) /* 倒序输出 */ { m = a[i]; printf( "%c", hex[m] ); } printf( "\n" ); }
2、数组计算回文数
一个正数如果顺着和反过来都是一样的(比如12321,反过来也是12321),那么就称为回文数。回文数不能以0
开头,回文数从1
开始。使用数组计算回文数,代码如下,
#include <stdio.h> int main() { int m[16], n, i, t, count = 0; long unsigned a, k; printf( "输出回文数\n" ); for ( n = 1; n < 512; n++ ) /*穷举n的取值范围*/ { k = 0; t = 1; a = n * n; /*计算n的平方*/ for ( i = 0; a != 0; i++ ) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/ { m[i] = a % 10; a /= 10; } for (; i > 0; i-- ) { k += m[i - 1] * t; /*t记录某一位置对应的权值*/ t *= 10; } if ( k == n * n ) printf( "%2d%10d%10d\n", ++count, n, n * n ); } return(0); }
3、求数列的第n项以及前n项之和
求数列:f(1)=f(2)=1;f(n)=3*fn−1+2*fn−2 (n>2)
的第n
项以及前n
项之和,代码如下,
#include <stdio.h> int main() { int n; int sum = 2;//前两项之和为2 printf("请输入n:\n"); scanf("%d", &n); int array[100]; array[0] = 1; array[1] = 1; int i; for (i = 2; i < n; i++) { array[i] = 3 * array[i - 1] + 2 * array[i - 2]; sum = sum + array[i]; } printf("%d %d", array[n - 1], sum); return 0; }
4、求数中的第k位数字
输入一个数n和位数k,它把数n从右边起的第k(k>0)位数字的值给出来,其中n为正整数,若n的位数不足k,则返回值0。代码如下,
#include <stdio.h> #include <math.h> int digit(int n, int k) { int x, a; int arr[64]; int i = 0; if (n < pow(10, k - 1))//判断k是否超位数 { x = 0; } else { for (i = 0; i <= k - 1; i++)//判断到k位时即可结束 { a = n % 10; n = n / 10; arr[i] = a; } x = arr[k - 1]; } return x; } int main() { int n, k; printf("请输入n和k:\n"); scanf("%d %d", &n, &k); printf("%d", digit(n, k)); return 0; }