大数阶乘问题,想学习下,求t=(ra[j]-'0')*i中括号内什么意思

C少 2011-11-27 05:14:55
int _tmain(int argc, _TCHAR* argv[])
{
char ra[10000]={0};
ra[0]='1';
int n;
int j;
int t;
int l;
printf("请输入一个数:");

scanf("%d",&n);

for(int i=1;i<=n;i++)
{
for(l=0;ra[l];l++);

for(j=l-1;j>=0;j--)
{

t=(ra[j]-'0')*i;
ra[j]=t%10+'0';
t=t/10;

for(int jf=1;t;jf++)
{

if(ra[j+jf]==0)
{
ra[j+jf]='0';
}
ra[j+jf]=ra[j+jf]+t%10;
t=t/10;
if(ra[j+jf]>'9')
{
ra[j+jf]-=10;
t++;
}

}
}
}
for(l=0;ra[l];l++);
printf("%d的阶乘有%d位\n",n,l);
for(l=l-1;l>=0;l--)
{
printf("%c",ra[l]);
}
printf("\n");
getchar();
return 0;
}

代码是网上搜的,没注释,看起来有点费劲,想知道ra[j]-'0'什么意思,其次是for循环内的,这一块:
for(j=l-1;j>=0;j--)
{

t=(ra[j]-'0')*i;
ra[j]=t%10+'0';
t=t/10;

for(int jf=1;t;jf++)
{

if(ra[j+jf]==0)
{
ra[j+jf]='0';
}
ra[j+jf]=ra[j+jf]+t%10;
t=t/10;
if(ra[j+jf]>'9')
{
ra[j+jf]-=10;
t++;
}

}
...全文
201 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2011-11-28
  • 打赏
  • 举报
回复
字符和数字的转换吧。
AnYidan 2011-11-28
  • 打赏
  • 举报
回复
看看 ascii 表,你就明白了
柯本 2011-11-27
  • 打赏
  • 举报
回复
是的,字符c('0'-'9')转数字n(0-9)可用
n=c-'0';
反过来可用
c=n-'0';
如果n大于9,就可以用n/=10;

C少 2011-11-27
  • 打赏
  • 举报
回复
其实就是字符和数字的转换,可以这么理解吧
hondely 2011-11-27
  • 打赏
  • 举报
回复
n!=n*(n-1)......*i*......1
柯本 2011-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ooo532200 的回复:]
那下面一句t模10后又加'0’,又变成什么
[/Quote]
反过来,将数字变成字符
0-->'0'
1-->'1'
...
9-->'9'
C少 2011-11-27
  • 打赏
  • 举报
回复
那下面一句t模10后又加'0’,又变成什么
柯本 2011-11-27
  • 打赏
  • 举报
回复
没细看代码.一般情况下
ra[j]-'0'
rapj[j]为'0'-'9'的字符,减'0'后就变成0-9的数字了

70,020

社区成员

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

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