实例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、阿鹏

最新文章

  1. Android-Menu [使用C# And Java实现]
  2. python 3 学习笔记 (三)
  3. C#复习②
  4. mac os x使用Git简易入门教程
  5. mysql 权限篇
  6. lintcode:二叉树的中序遍历
  7. oracle的sql优化
  8. struts2整合json要注意的问题
  9. 本人第一个android游戏《新连连看》上架
  10. java Script 用if else 实现从大到小指定输出,升序排列
  11. js获取url,截取url参数,截取url后文件名
  12. 201521123098 《Java程序设计》第13周学习总结
  13. 远程连接MySQL,防火墙阻止访问,解决方法
  14. mac上配置react-native环境run-ios/run-android命令遇到的问题
  15. rabbitmq web管理
  16. January 11th, 2018 Week 02nd Thursday
  17. 第一个项目:Python pygame——外星人大战(心得)
  18. 详解UILabel的adjustsFontSizeToFitWidth值
  19. git用法资料
  20. mybatis xml和dao扫描写法

热门文章

  1. maven课程 项目管理利器-maven 4-1 使用maven创建web项目 5星
  2. XHTML教会我的一些东西-1
  3. sqlserver门户设置
  4. Gradle 教程:第二部分,JAVA PROJECTS【翻译】
  5. 增加ssh无密码信任连接的安全性
  6. CRM的划分
  7. Spring Boot:内置tomcat启动和外部tomcat部署总结
  8. python3基础13(format的使用)
  9. WebRTC协议
  10. 课程设计__C++初步,C++对C的扩充