C语言实例解析精粹学习笔记——26
2024-09-06 09:48:33
实例26:阿拉伯数字转换为罗马数字,将一个整数n(1~9999)转换为罗马数字,其中数字和罗马数字的对应关系如下:
原书中的开发环境很老,我也没有花心思去研究。自己在codeblocks中进行开发的,所以程序与原书中的程序有很多地方不同,但是关键的一些程序还是采用原书中的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h> #define ROWS 4
#define COLS 4 //整数的分段标准
int nums[ROWS][COLS] = {
{,,,},
{,,,},
{,,,},
{,,,},
};
//用于转换的罗马字符
char *roms[ROWS][COLS] = {
{"m","m","m","m"},
{"cm","d","cd","c"},
{"xc","l","xl","x"},
{"ix","v","iv","i"},
}; int main()
{
int IntToTrans; //待转换的整数(1~9999)
char TransRoman[]; //转换后的罗马字母存放的数组
int power, index; //判断输入数据是否在规定范围内,如果不符合则一直循环直至符合
while()
{
printf("Please input the integer number you want to trans to roman(1..9999): \n");
scanf("%d", &IntToTrans);
if(IntToTrans < || IntToTrans>)
{
printf("Sorry the number you input is out of range\n");
continue;
}else{
break;
}
} //用来转换的关键代码部分
TransRoman[] = '\0'; //因为stract函数的性质
for(power=; power<ROWS; power++)
{
for(index=; index<COLS; index++)
{
while(IntToTrans >= nums[power][index])
{
strcat(TransRoman,roms[power][index]);
IntToTrans -= nums[power][index];
}
}
}
printf("%s\n",TransRoman);
return ;
}
第29行-41行算是自己写的程序代码,其实本来是一段很简单的代码,但是在实际运行时却出现了问题。
最开始设计的时候第33行的代码是
scanf("%d\n",IntToTrans);
关于这个用法的错误点可以参考以下链接:
https://blog.csdn.net/weiweicsdn1/article/details/52185453
第43行-56行是将整数转换成罗马数字的关键代码,一开始是想自己用取余的方法来写一下代码,但是感觉只是有一个大概的念头,而不是比较明确的程序流程,于是就偷懒了,采用了原书中的代码。
TransRom是存放转换后罗马数字的字符串,通过将需要转换的整数与分段数(1000,900,500,……)相比较,不断地减去这些数直至0。通过第51行的stract函数将新转换的罗马数字与之前的合并。因为stract函数的原因需要先使TransRoman[0]='\0'。下图为简单的stract函数介绍
当把第44行注释掉后的运行结果如下图所示:
正常程序运行结果:
总结:有思路真的不代表你能写出程序来,还是要完整的实现出来。
致谢:同学:hcr1995、阿鹏
最新文章
- Android-Menu [使用C# And Java实现]
- python 3 学习笔记 (三)
- C#复习②
- mac os x使用Git简易入门教程
- mysql 权限篇
- lintcode:二叉树的中序遍历
- oracle的sql优化
- struts2整合json要注意的问题
- 本人第一个android游戏《新连连看》上架
- java Script 用if else 实现从大到小指定输出,升序排列
- js获取url,截取url参数,截取url后文件名
- 201521123098 《Java程序设计》第13周学习总结
- 远程连接MySQL,防火墙阻止访问,解决方法
- mac上配置react-native环境run-ios/run-android命令遇到的问题
- rabbitmq web管理
- January 11th, 2018 Week 02nd Thursday
- 第一个项目:Python pygame——外星人大战(心得)
- 详解UILabel的adjustsFontSizeToFitWidth值
- git用法资料
- mybatis xml和dao扫描写法