Дополнение к двум в C ++ - недопустимые типы int [int] для подстрочного индекса

0

Я пытаюсь реализовать какой-то двухкомпонентный алгоритм в C++, и до сих пор я думаю, что моя логика правильная. Тем не менее, я получаю следующую ошибку, когда я запускаю invalid types 'int[int]' for array subscript

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){

    int a[4] = {0, 2, 3, 5};
    int b[4] = {9, 7, 8 ,4};

    int sum = 0;
    int transmit = 0;
    int c{0};

    for (int k=3;k>0;k--){
        sum = a[k]+b[k]+transmit;
        c[k+1]=sum%10;
        transmit=sum/10;
    }

    c[0] = transmit;
    return 0;
}
  • 0
    Я все еще получаю ту же ошибку.
  • 1
    @hagubear это правильно, он считается инициализацией фигурной скобки и для int эквивалентен int c(0); ,
Показать ещё 2 комментария
Теги:
twos-complement

2 ответа

0
Лучший ответ

Я предполагаю, что ваша цель состоит в том, чтобы сделать плюс работу двух внутренних массивов? Небольшое объяснение: вы должны объявить пять единиц для "c", так как может быть один дополнительный носитель (вы называете передачу)

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){

    int a[4] = {0, 2, 3, 5};
    int b[4] = {9, 7, 8 ,4};

    int sum = 0;
    int transmit = 0;
    int c[5] = {0};

    for (int k=3;k>0;k--){
        sum = a[k]+b[k]+transmit;
        c[k+1]=sum%10;
        transmit=sum/10;
    }

    c[0] = transmit;
    return 0;
}

В этом формате: массив десятичных целых чисел, их несколько трудно преобразовать в двоичный файл напрямую. Но я все еще могу попытаться дать решение:

// first convert to an unsigned int
unsigned int result = 0;
for (int k = 0; k < 5; ++k) {
    result *= 10;
    result += c[k];
}

// then convert to binary
char binary[32]; // 32bit should be enough
int len = 0;
while (result > 0) {
    binary[len++] = (result % 2) + '0';
    result /= 2;
}

// finally print binary
for (int k = len - 1; k >= 0; --k) {
    printf("%c", binary[k]);
}

Полная программа:

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){

    int a[4] = {0, 2, 3, 5};
    int b[4] = {9, 7, 8 ,4};

    int sum = 0;
    int transmit = 0;
    int c[5] = {0};

    for (int k=3;k>0;k--){
        sum = a[k]+b[k]+transmit;
        c[k+1]=sum%10;
        transmit=sum/10;
    }

    c[0] = transmit;

    // first convert to an unsigned int
    unsigned int result = 0;
    for (int k = 0; k < 5; ++k) {
        result *= 10;
        result += c[k];
    }

    // then convert to binary
    char binary[32]; // 32bit should be enough
    int len = 0;
    while (result > 0) {
        binary[len++] = (result % 2) + '0';
        result /= 2;
    }

    // finally print binary
    for (int k = len - 1; k >= 0; --k) {
        printf("%c", binary[k]);
    }

    printf("\n");

    return 0;
}
  • 0
    Пустой вывод. Он должен вернуть результат дополнения до двух.
  • 0
    @dwvaxaz: вывод пуст, потому что вы никогда ничего не делали с помощью c[] после его вычисления.
Показать ещё 11 комментариев
4

c имеет тип int

int c{0};

И вы пытаетесь отнестись к нему так, как если бы это был массив:

c[k+1]=sum%10;

Вы не можете юридически разыменовать int.

  • 0
    В каком случае, как я должен обойти это?
  • 0
    @dwvaxaz делает c массивом или std::vector , соответствующего размера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню