请问为什么答案是8 1 9 6 0 ——d>=0时才为数组a赋值,-5 8 1 -3 9 6 -2 -7 0输入中只有8 1 9 6 0符合>=0的条件。
a[0]的值是什么?——显然是8,因为肆敏8是第一个>=0的数,尺雹冲赋给了a[0]。
我做出来的陵歼答案是a[1]=8 a[2]=1 a[3]=9 a[4]=6, 8 1 9 6——肯定不是这个结果,依次应该是1 9 6 0。
a[5]=0但是for循环输出j<5,只会到a[4],求解最后的0是怎么得出的——代码没有 *** 作到a[5],只 *** 作到a[4],最后d==0时赋给了a[4],所以a[4]的值是0。
for(int j=0j<lj++)
{
s[j]*=i
s[j+1]+=s[j]/10
s[j]%=10
}
这里错了,宴散谈 i=4时数组中存的是6, j=0, s[0]=6*4=24, 需要进位, s[1]=2, 进位后s[0]=4,到此为止还是对的,然后接着j++后又要算s[1]=2*4=8这个就不应该算了,因为2是进位不应该再参与计算。
应该用一个变量来存储进位的数据,在对每位乘完之后再加上进位数, 同时每次计算时没必要一直算到末尾。
从原来的外层for循环开始的代码替换成下面掘晌的代码试试, 手头没有编译器,不保证没有错误哈:
int len=1for(int i=1 i<=n i++)
{
int plus=0
for(int j=0 j<len j++)
{
s[j] = s[j]*i + plus
plus = s[j]/10
s[j] %= 晌碰10
}
while(plus>0)
{
s[len++] = plus%10
plus /= 10
}
}
while(len>0)
cout<<s[--len]
cout<<endl
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)