请问这题怎么修改,一直解答错误

img

#include<stdio.h>
#include<math.h>
int main()
{
    int a,d,b,q,s1=0,s2=0,s=0,g;
    int n;
    scanf("%d%d%d%d",&a,&d,&b,&q);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        s1=a+(i-1)*d;
        s2=b*pow(q,i-1);
        s=s+s1*s2;
    }
    printf("%d",s);
    return 0;
    
}

题目里 n<=10^5 ,这个数大大超出计算机能表示的数据类型的范围了,得另外想办法。

最后一行有提示,由于值可能很大,只需要对99824353取模
就是说循环中对s1*s2的值进行取模,避免整型溢出

肯定是溢出了,这种大数一定会溢出的。
第13行改为s = s + (s1*s2)%99824353;

#include <iostream>
using namespace std;
int f1(int n,int a1,int d)
{
    if(n==1)
        return a1%99824353;
    else
        return (f1(n-1,a1,d)%99824353+d%99824353)%99824353;
}
int f2(int n,int b1,int q)
{
    if(n==1)
        return b1%99824353;
    else
        return ((f2(n-1,b1,q)%99824353)*(q%99824353))%99824353;
}
int main()
{
    int a1=0,d=0,b1=0,q=0,n=0,sn=0;
    cin>>a1>>d>>b1>>q;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        sn+=(f1(i,a1,d)%99824353*f2(i,b1,q)%99824353)%99824353;
        sn%=99824353;
    }
    cout<<sn;
    return 0;
}