Rohan Sah Ответов: 1

Почему сумма становится меньше фактической. Объяснять


#include<stdio.h>
#include<math.h>
int main()
{
    int n,i,sum=0;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n/2;i++)
    {
        while(a[i]>9)
            a[i]=a[i]/10;
    }
    for(i=n/2;i<n;i++)
         a[i]=a[i]%10;
    for(i=0;i<n;i++)
        sum=sum+a[i]*(pow(10,n-1-i));
    if(sum%11==0)
        printf("OUI");
    else
        printf("NON");
    return 0;
}


Что я уже пробовал:

мы должны ввести число n, которое обозначает размер массива, где n должно быть четным.затем будет взята первая половина первой цифры массива.
во второй половине массива будет взята последняя цифра и сформировано число, если оно делится на 11, то мы должны напечатать "OUI"и еще "NON".
номер, который я ввел.
n=6;
затем
15478
8452
8232
874
985
4512
согласно вопросу сумма должна быть 188452.
но мой ответ 188451 зачем объяснять

1 Ответов

Рейтинг:
11

OriginalGriff

Если я запущу его с вашими данными, то получу 188452:

int n = 6;
int i = 0;
int sum = 0;
int a[6] = {15478, 8452, 8232, 874, 985, 4512};

for(i=0;i<n/2;i++)
{
    while(a[i]>9)
        a[i]=a[i]/10;
}
for(i=n/2;i<n;i++)
     a[i]=a[i]%10;
for(i=0;i<n;i++)
    sum=sum+a[i]*(pow(10,n-1-i));
printf("%u\n", sum);
if(sum%11==0)
    printf("OUI\n");
else
    printf("NON\n");
Поэтому я бы заподозрил, что у вас есть ошибка ввода данных.
Но эта линия:
sum=sum+a[i]*(pow(10,n-1-i));
это слишком все усложняет, не так ли? Сравните его с гораздо более очевидной версией:
sum = sum * 10 + a[i];
И посмотрите, получите ли вы те же результаты ...


Rohan Sah

можете ли вы объяснить, почему он давал неправильные ответы

Rohan Sah

можете ли вы объяснить, почему он давал неправильные ответы

OriginalGriff

При догадке вы промахнулись-ввели данные ...

CPallini

5. (Похоже, вы полностью восстановились!)

OriginalGriff

Нет... это был низко висящий фрукт! :смеяться: