初莫M 发表于 2023-10-4 17:54:07

为什么答案错误啊

题目是
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。

输入格式:
输入数字A与非负整数N。

输出格式:
输出其N项数列之和S的值。
#include<stdio.h>
#include<math.h>
int main()
{
        int a,n;
        scanf("%d%d",&a,&n);
        int sum=0,i=0,b;
        for(;i<n;i++)
        {
                b=a*pow(10,i);
                sum=sum+b;
        }
        printf("%d",sum);
}

isdkz 发表于 2023-10-4 17:54:20

这段代码的问题在于没有考虑到每一项的具体数值,而是通过 pow 函数和循环来计算每一项的值。这样做会导致精度问题,从而得到错误的结果。

正确的做法是通过一个变量来记录当前项的值,然后累加到总和中。具体实现可以使用一个变量来记录当前项的值,每次将其乘以 10 并加上 A,然后累加到总和中。代码如下:

#include <stdio.h>

int main() {
    int a, n;
    scanf("%d%d", &a, &n);
    int sum = 0, cur = a;
    for (int i = 0; i < n; i++) {
      sum += cur;
      cur = cur * 10 + a;
    }
    printf("%d", sum);
    return 0;
}


这样就可以得到正确的结果了。

Mike_python小 发表于 2023-10-4 18:10:33

抱歉,我之前提供的代码有误。以下是一个修正后的 C 语言代码,用于计算数列之和 S:


#include <stdio.h>

int main() {
    int a, n;
    scanf("%d%d", &a, &n);

    int sum = 0;
    int current_term = 0;

    for (int i = 0; i < n; i++) {
      current_term = current_term * 10 + a;
      sum += current_term;
    }

    printf("%d", sum);

    return 0;
}


在这个修正后的代码中,我使用了一个变量 `current_term` 来存储当前项的值。在每次循环中,我们将 `current_term` 乘以 10,然后加上 `a`,以计算下一项的值。然后将 `current_term` 的值累加到 `sum` 中。这样,我们可以正确计算数列之和 S。
页: [1]
查看完整版本: 为什么答案错误啊