加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
李思静回文数.cpp 7.36 KB
一键复制 编辑 原始数据 按行查看 历史
HK意境 提交于 2020-07-05 16:30 . C语言课程和设计,回文进制数
// 回文数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string.h>
#include<time.h>
#include <iostream>
#include <mmsystem.h>//导入声音头文件
#pragma comment(lib, "Winmm.lib") //For MCI(Media Control Interface,媒体控制接口)
using namespace std;
//定义全局变量拿来储存 对应进制数的数组:
int binaryArray[100];
int octalArray[100];
char hexArray[100];
//初始化几个进制数的数组,格式化数组
void initalGloabalArray()
{
for (int i = 0; i < 100; i++)
{
binaryArray[i] = -1;
octalArray[i] = -1;
hexArray[i] = '\0';
}
}
// 返回是否为十进制的回文数:
//是返回 1 不是返回0
int isDecimalPalindrome(int number);
//返回是否为二进制的回文数:
//是返回 1 , 不是返回 0 , 并且如果是的话返回调用函数
int isBinaryPalindrome(int number);
//返回是否为十六进制的回文数
int isHexPalindrome(int number);
//判断是否为八进制的字符串
int isOctalPalindrome(int number);
//得到二进制,八进制,十六进制的对应的数组
int getBinaryArray(int number);
int getOctalArray(int number);
int getHexArray(int number);
// 播放背景音乐
void playMusic()
{
mciSendString("open MySoul.mp3 alias start", NULL, 0, NULL); //打开音频文件,并且开始播放
mciSendString("play start repeat", NULL, 0, NULL); //循环播放音乐
mciSendString("\\MySoul.mp3", NULL, 0, NULL);
}
//定义设置颜色的函数,方便我们使用
//第一个参数是字体颜色,第二个参数是背景颜色
void setColor(unsigned short ForeColor, unsigned short BackGroundColor)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//获取当前窗口句柄
SetConsoleTextAttribute(handle, ForeColor + BackGroundColor * 0x10);//设置颜色
}
//定义设置光标位置的函数,与gotoxy()函数相似原型为:SetPos(x,y)x,y为坐标类型可以为实型
void SetPos(int x, int y) //(0,0)第一行行首,(119,0)第一行行末
{
COORD pos;
HANDLE handle;
pos.X = x;
pos.Y = y;
handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle, pos);
}
//清屏
void clear() {
system("CLS");
}
// 菜单函数
void menu();
//判断输出打印函数
void printShow(int number);
int main()
{
system("COLOR f9");
playMusic();
SetPos(50, 2);
int choose = 0;
int inputNumber = 0;
printf("欢迎来到进制回文世界!");
for ( ; ; )
{
SetPos(50, 2);
printf("欢迎来到进制回文世界!");
SetPos(55, 3);
printf("1.判断回文进制数");
SetPos(55, 4);
printf("2.退出系统");
SetPos(55,6);
scanf("%d", &choose);
switch (choose)
{
case 1:
{
clear();
SetPos(50, 1);
printf("欢迎来到进制回文世界!");
SetPos(55, 3);
setColor(2, 15);
printf("请输入一个十进制的整数:");
SetPos(55, 4);
scanf("%d", &inputNumber);
printShow(inputNumber);
break;
}
case 2 :
exit(EXIT_SUCCESS);
break;
default:
system("CLS");
for (int i = 0; i < 3; i++)
{
Sleep(800);
SetPos(50,10);
setColor(i,15);
printf("输入错误请重输入");
}
system("CLS");
break;
}
SetPos(45, 12);
setColor(5, 15);
initalGloabalArray();
}
return 0;
}
//得到二进制,八进制,十六进制的对应的数组
//得到二进制数组
int getBinaryArray(int number)
{
int i ;
for ( i = 0; number!= 0; i++)
{
binaryArray[i] = number % 2;
number /= 2;
}
return i;
}
//得到八进制数组
int getOctalArray(int number)
{
int i;
for ( i = 0;number!= 0 ; i++)
{
octalArray[i] = number % 8;
number /= 8;
}
return i;
}
//得到十六进制数组
int getHexArray(int number)
{
int D_H[100] = {EOF};
char Hstring[100] = { '\0' };
int i = 0;
for (;number!= 0 ; i++)
{
D_H[i] = number % 16;
number /= 16;
}
for (int j = 0; j <= i && D_H[j] != EOF; j++)
{
if (D_H[j] >= EOF && D_H[j] <= 9)
{
hexArray[j] = (char)((D_H[j]-0)+ 'A');
}
else if (D_H[j] >= 10)
{
hexArray[j] = (char)(D_H[j] - 10 + 'A');
}
}
return strlen(hexArray);
}
// 返回是否为十进制的回文数:
//是返回 1 不是返回0
int isDecimalPalindrome(int number)
{
int sum = 0, n;
n = number;
while (n > 0)
{
sum = sum * 10 + n % 10;
n = n / 10;
}
if (sum == number)
{
return 1;
}
return 0;
}
//返回是否为二进制的回文数:
//是返回 1 , 不是返回 0 , 并且如果是的话返回调用函数
int isBinaryPalindrome(int number)
{
int len = getBinaryArray(number) + 1;
//想得到
for (int i = 0, j = len ; i<= j ; i++,j--)
{
if (binaryArray[i] != binaryArray[j])
{
return 0;
}
}
return 1;
}
//返回是否为十六进制的回文数
int isHexPalindrome(int number)
{
for (int i = 0, j = getHexArray(number) - 1; i <= j; i++, j--)
{
if (hexArray[j] != hexArray[i])
{
return 0;
}
}
return 1;
}
//判断是否为八进制的字符串
int isOctalPalindrome(int number)
{
int len = getOctalArray(number) + 1;
//想得到
for (int i = 0, j = len; i <= j; i++, j--)
{
if (octalArray[i] != octalArray[j])
{
return 0;
}
}
return 1;
}
//输出打印函数
void printShow(int number)
{
if (isDecimalPalindrome(number))
{
system("CLS");
system("COLOR f9");
SetPos(50, 8);
printf("进制:十进制");
SetPos(47, 9);
printf("回文数:");
printf("%d", number);
}
else if (isBinaryPalindrome(number))
{
system("CLS");
system("COLOR f9");
SetPos(50, 8);
printf("进制:二进制");
SetPos(47,9);
printf("回文数:");
for (int i = 0, j = 0; i < getBinaryArray(number) + 1;j++, i++)
{
setColor(j,15);
if (j % 10 == 0)
{
j = 0;
}
printf("%d",binaryArray[i]);
}
}
else if (isOctalPalindrome(number))
{
system("CLS");
system("COLOR f9");
SetPos(50, 8);
printf("进制:八进制");
SetPos(47, 9);
printf("回文数:");
for (int i = 0, j = 0; i < getOctalArray(number) + 1; j++, i++)
{
setColor(j, 15);
if (j % 10 == 0)
{
j = 0;
}
printf("%d", octalArray[i]);
}
}
else if (isHexPalindrome(number))
{
system("CLS");
system("COLOR f9");
SetPos(50, 8);
printf("进制:十六进制");
SetPos(47, 9);
printf("回文数:");
for (int i = 0, j = 0; i < getHexArray(number) ; j++, i++)
{
setColor(j, 15);
if (j % 10 == 0)
{
j = 0;
}
printf("%c", hexArray[i]);
}
}
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化