提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、十六进制转八进制
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void print(int a[], int n)
{
for (int i = 0; i <n; i++)
printf("%d\n", a[i]);
}
int save(int a[],int n)//保存转化好的值,方便后续输出
{
int ans=0;
for (int i = 0; i < n; i++)
{
ans += a[i] * pow(10, i );
}
return ans;
}
int turn_string_into_num(char c[], int a[])//输入的数字可能很大,用long long都存不下,所以用字符数组保存,再转变成数组
{
int n = strlen(c);
for (int i = 0; i < n; i++)
{
if (c[i] == 'A' || c[i] == 'B' || c[i] == 'C' || c[i] == 'D' || c[i] == 'E' || c[i] == 'F' || c[i] == 'G')
{
a[i] = c[i] - '0' - 7;
}
else
a[i] = c[i] - '0';
}
return n;
}
void turn_sequence(int a[],int b[], int n)//进行十六进制转化成十进制运算时,先把数组逆序方便运算
{
for (int i = n - 1,j=0; i >= 0; i--,j++)
{
b[j] = a[i];
}
}
int turn_16_to_10(int b[], int n)
{
int num = 0;
for (int i = 0; i < n; i++)
{
num += b[i] <<(4*i);//关键步骤:b[i]*2的(4i)次方
}
return num;
}
int turn_10_to_8(int ans10,int d[])
{
int a[1000];
int num = 0;
int n = ans10;
while (n != 0)
{
a[num] = n % 8;
num++;
n = n / 8;
}
turn_sequence(a, d, num );
return save(a, num);
}
int main()
{
int ans[1000];
int d[1000];
int b[1000];
int a[1000];
char c[1000];
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%s", &c);
int num=turn_string_into_num(c, a);
turn_sequence(a,b,num);
int ans10 = turn_16_to_10(b, num);
ans[i]=turn_10_to_8(ans10, d);
}
print(ans, n);
/*2
39
123ABC*/
return 0;
}
二、十进制转十六进制
要点:
1.字符数组要记得初始化
2.注意0的特殊情况(不进入循环)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
int turn_10_to_16(int ans10, char s[])
{
int num = 0;
int n = ans10;
if (n == 0)
{
s[num] = '0';
num++;
} //注意0的特殊情况
else
{
while (n != 0)
{
int c;
c = n % 16;
if (c > 9)
{
s[num] = c + 55;//把数字转化成大写字母
num++;
}
else
{
s[num] = c + 48;//把数字转化成字符串中的数字
num++;
}
n = n / 16;
}
}
return num;
}
int main()
{
char s[1000]={0};//要先初始化
int n;
scanf("%d", &n);
int num=turn_10_to_16(n, s);
for (int i = num - 1; i >= 0; i--)
printf("%c", s[i]);
return 0;
}
三、特殊回文数
要点:第一位数字不能为0,其他位可以
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
void five(int n)
{
for (int i = 1; i <= 9; i++)//第一个数字不能为0,第二,第三个数字都能为0。
{
for (int j = 0; j <= 9; j++)
{
for (int k = 0; k <= 9; k++)
{
if (2*(i+j)+k==n)
{
printf("%d%d%d%d%d", i, j, k, j, i);
printf("\n");
}
}
}
}
}
void six(int n)
{
for (int i = 1; i <= 9; i++)
{
for (int j = 0; j <= 9; j++)
{
for (int k = 0; k <= 9; k++)
{
if ((i+j+k)*2 == n)
{
printf("%d%d%d%d%d%d", i, j, k,k, j, i);
printf("\n");
}
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
five(n);
six(n);
return 0;
}
四、数列特征
要点:1.每个数的绝对值都小于10000,所以min=-10001,max=10001
2.注意只有一个元素的情况,最大值和最小值都是那个元素,要特别处理,不然输出默认的min和max的值
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int sum = 0;
int max = -10001, min = 10001;//每个数的绝对值都小于10000。
int a[10000];
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
a[i] = x;
sum += a[i];
}
for (int i = 1; i <= n; i++)
{
if (a[i] > max)
max = a[i];
}
if (n == 1)//注意只有一个元素的情况,最大值最小值都是那个元素
printf("%d\n", a[1]);
else
printf("%d\n", max);
for (int i = 1; i <= n; i++)
{
if (a[i] < min)
min = a[i];
}
if (n == 1)
printf("%d\n", a[1]);
else
printf("%d\n", min);
printf("%d", sum);
/*5
1 3 -2 4 5*/
return 0;
}
五、字母图形
要点:
1.画图分析思路
2.先输出A及其A前面的,再输出A及其A后面的
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;
void print(char a[], char b[],int i,int m)
{
int n = i;
for (int i = 1; i <= n&&i<=m; i++)//i还要比列数少,不然超出列数范围
{
printf("%c", b[i]);
}
for (int j = n + 1; j <= m; j++)
{
printf("%c", a[j]);
}
printf("\n");
}
int main()
{
int n, m;
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++)
printf("%c", 'A' + (i - 1));
printf("\n");//先输出第一行
for (int i = 1; i <= n - 1; i++)
{
char b[100] = { 0 };
char a[100]={0};
for (int j = i + 1,p=0; j <= m; j++,p++)
{
a[j] = 'A' + p;
}//输出A及其A后面的
for (int k = i,p=1; k >= 1; k--,p++)
{
b[k] = 'A' + p;
}//输出A及其A前面的
print(a, b, i, m);
}
return 0;
}