罗马数字转阿拉伯数字

一、学习要点:
1.运用递归的思想,找出罗马字符串中最大的元素,对左边的处理是减去,对右边的处理是加上;递归头是字符串只剩下一个元素时,或者右边的下标小于左边的下标;
二、代码:

#include<stdlib.h>
#include<stdio.h>
int single_r2i(char ch)
{
 char s1[7] = { 'I','V','X','L','C','D','M' };
 int  s2[7]= { 1,5,10,50,100,500,1000 };
 for (int i = 0; i < 7; i++)
 {
  if (s1[i] == ch) {
   return s2[i];
  }
 }
}
int find_maxindex(char* s, int l, int r) {
 int max = single_r2i(s[l]);
 int max_index=l;
 for (int i = l+1; i <= r; i++)
 {
  if (single_r2i(s[i]) > max)
  {
   max = single_r2i(s[i]);
   max_index = i;
  }
 }
 return max_index;
}
int r2i(char* s, int l, int r) {
 int max_index=0;
 if (l == r) {
  return single_r2i(s[l]);
 }
 if (l > r)
 {
  return 0;
 }
 else {
  max_index = find_maxindex(s, l, r);
  return single_r2i(s[max_index]) + r2i(s, max_index + 1, r) - r2i(s, l, max_index - 1);
 }
}
int main()
{
 char s[7] = { 'M','C','M','X','C','I','X' };
 int result = r2i(s, 0, 6);
 printf("%d\n", result);
 system("pause");
 return 0;
}

三、程序运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值