题目:输入一个正整数n;求6^1+6^2+...+6^n的和除以7的余数是多 其中6^1表示6的一次方
#include <iostream>
using namespace std;
int main()
{
int i,n;
long s=0,a=1;
cin>>n;
if(n>0){
for(i=1;i<=n;i++){
a=a*6;
s=s+a;
}
}
cout<<s%7<<endl;
return 0;
}
但是我这样写不对是为什么
有没有人帮我看一下
答案显示for循环语句改为
a=a*6%7;
s=(a+s)%7
我看不太明白
原来的代码中只对 a 进行了乘法运算,但没有对其取模。因此需要将 a 的计算改为 a=a*6%7,表示先将 a 乘以 6,再对 7 取模。
另外,原来的代码中使用了一个变量 s 来保存和,但没有对其取模。因此需要将 s 的计算改为 s=(a+s)%7,表示先将 a 和 s 相加,再对 7 取模。
值太大溢出了
问你除以7的余数,就是说这个数本身太大没法存,你只需要存余数即可
那么在循环过程中就必须取余数,等溢出了再取余数已经晚了
n是不是很大,造成溢出了