以前提过的统计罗马数字的问题。看看这个程序,帮忙解释一下。。。。看看用到什么知识了。各位大侠帮帮忙。。

zhangyongnihao1 2009-07-06 03:02:14
看看这个程序,里面的许多句子都不太理解。还有里面的参数,

#include<stdio.h>
int n;
int i[101],v[101],x[101],l[101],c[101];
int num[]={1,4,5,9,10,40,50,90,100};
char s[][10]={"i", "iv","v","ix","x","xl","l","xc","c"
};
void print()
{
printf("%d: %d i, %d v, %d x, %d l, %d c\n",n,i[n],v[n],x[n],l[n],c[n]);
}
int main()
{
int j,t,k,ii,vv,xx,kk,ll,cc,f;
for(j=1;j<=100;j++)
{
ii=vv=xx=ll=cc=0;
t=j;
for(k=8;k>=0;k--)
{
while(t>=num[k])
{
t-=num[k];
for(f=0;s[k][f];f++)
{
if(s[k][f]=='i')ii++;
if(s[k][f]=='v')vv++;
if(s[k][f]=='x')xx++;
if(s[k][f]=='l')ll++;
if(s[k][f]=='c')cc++;
}
}
}
i[j]=i[j-1]+ii;
v[j]=v[j-1]+vv;
x[j]=x[j-1]+xx;
l[j]=l[j-1]+ll;
c[j]=c[j-1]+cc;
}
while(scanf("%d",&n),n)
{
print();
}
return 0;
}
...全文
92 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyongnihao1 2009-07-10
  • 打赏
  • 举报
回复
你为什么总怕被人不结贴呢?自己都没给出解释!!!!!
ChamPagneZ 2009-07-09
  • 打赏
  • 举报
回复
判断数字是不是罗马数字(千以内):
千位上只能是:M,MM,MMM,或者空.
白位上只能是:CD,CM,D,C,CC,CCC,或者空.
十位上只能是:XC,XL,L,X,XX,XXX,或者空.
个位上也类似.
/////////////////////////////////////
知道判断规则,应该知道进行罗马数字统计了.
你贴的那段代码,太魔幻了,不想看.
blh 2009-07-09
  • 打赏
  • 举报
回复
这次不会得到答案人又消失了吧
zhangyongnihao1 2009-07-09
  • 打赏
  • 举报
回复
当然也不是。就是把其中涉及的算法,还有设计思想用文字阐释出来,该死的学校,程序都出来了还搞这么多事。我的表达能力实在不怎么样,希望能帮帮我,感谢。注释就是涉及算法时候标注一下就好了
bxl1989 2009-07-09
  • 打赏
  • 举报
回复
这个。。。每一句都注?
zhangyongnihao1 2009-07-09
  • 打赏
  • 举报
回复
就是麻烦大家把各语句注释写一下。还有就是涉及什么算法?在下不太会用语言描述。谢谢各位
zhangyongnihao1 2009-07-09
  • 打赏
  • 举报
回复
for(k=8;k>=0;k--)
{
while(t>=num[k])
还有
if(s[k][f]=='i')ii++;
if(s[k][f]=='v')vv++;
if(s[k][f]=='x')xx++;
if(s[k][f]=='l')ll++;
if(s[k][f]=='c')cc++;
这两段帮忙看看吧,怎么解释
ChamPagneZ 2009-07-08
  • 打赏
  • 举报
回复

pattern = r'^(CM|CD|D?C{0,3})(XL|XC|L?X{0,3})(IX|IV|V?I{0,3})$'
findcsdn 2009-07-06
  • 打赏
  • 举报
回复

罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面三条规则可以表示任意正整数。
重复数次:一个罗马数字重复几次,就表示这个数的几倍。
右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。
加线乘千:在一个罗马数字的上方加上一条横线,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,即是原数的1000000倍。


上面的程序大概意思也就是把阿拉伯数字转换成罗马数字.


asksgp 2009-07-06
  • 打赏
  • 举报
回复
很基础的东西,搂住哪里不明白?
Fleeboy 2009-07-06
  • 打赏
  • 举报
回复
ding
  • 打赏
  • 举报
回复
麻烦标明哪些函数语句、参数不是很理解!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧