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;
}