Me ajudem! preciso criar um programa sem usar operador + , -

Meu professor pediu, para criar um programa que faça a soma de dois números sem utilizar do operador soma ‘+’, alguém pode ajudar.

Lembrando que como ele ainda não trabalhou, comandos de loop “repetição”, como por exemplo o FOR, não podem ser usados,

“soma de dois números quaisquer que o usuário queira digitar”***********

Inverte o sinal do segundo e subtrai os dois.

int x, y;
cin >> x >> y;
cout << (x - (-y)) << endl;

obrigada, esqueci de dizer que não pode operador ‘-’ menos, na pressa de digitar… mas pode demais operadores

mas obrigada por responder e me ajudar.
tinha pensando nisso, mas ele não aceitou, não sei o que fazer, porque não posso usar comandos de repetição…

se tiver uma ideia a respeito …agradecerei muito… :smile:

Se não pode usar nenhum operador aritmético, eu só consigo imaginar o uso de operadores bitwise. Tem como fazer uma soma usando AND e XOR, mas precisa de um loop (que você disse que não pode utilizar). Então não tenho a menor ideia de como fazer isso sem nenhum desses recursos.

Exemplo:

#include <iostream>

using namespace std;

int soma_bitwise(int x, int y) {
  int sobra;
  while (y) {
    sobra = x & y;
    x ^= y;
    y = sobra << 1;
  }
  return x;
}

int main() {
  int x, y, result;
  cin >> x >> y;
  result = soma_bitwise(x, y);
  cout << result << endl;
}

Será que seu professor não quer que você crie métodos para fazer esses cálculos?
Ou então você vai ter que usar operação bit a bit tipo quando você vai somar números binários.

Parece que ele só quer que o programa peça dois números, e o programa devolve a soma, não? Ou seja, o usuário não precisa digitar o “+”, ele só vai digitar os dois números que ele queira somar

É o que está me parecendo @igor_ks

Veja bem, dá pra você fazer operações bit a bit, más fica um pouco difícil sem loop o resultado que você quer.

#include <stdio.h>

int main () {
	
	int r = 4 << 2; //saida = 16. É o mesmo que (4*2=8*2=16);
	int r = 4 >> 2; //saida = 1. É o mesmo que (4/2=2/2=1);
	int r = ~4; //acrescenta 1 e inverte o sinal para negativo e vice versa. É o mesmo que ++ e o resultado *-1
	
	printf("Resultado %d", r);
	return 0;
	
}

obrigada :stuck_out_tongue_closed_eyes: :heart_eyes:
mas tbm estou quebrando a cabeça e nao consigo… tentando imaginar como somar dois numeros sei la utilizando divisao e multiplicação, mas ainda nao vi saida…

ele quer que calcule, e mostre o resultado, sem usar soma ou subtração e loop

Também:

Além disso não pode:

Sobra apenas multiplicação e divisão.
Posso estar errado, mas vou postar a minha percepção:
1 - Considerando que um dos critérios para a validação da multiplicação é a regra dos 9 e esta utiliza a soma, você não vai poder testar/validar o resultado.
2 - Outro critério da multiplicação é justamente a utilização de somas sucessivas, como ocorre com o laços de repetição que também estão sob restrição.
3 - Não da para tentar a divisão, pois esta utiliza a multiplicação.

Posso estar errado, pois a matemática é cheia de surpresas, mas acredito que tal feito não seja possível.
Sugestão, ver com quem entende (Fórum de Matemáticos) como provar por absurdo que tal operação NÃO é possível, para valores diferentes, com exceção de alguns múltiplos.
Como não tenho conhecimento sobre c e derivados, procurei algo semelhante a soma realizada no java utilizando vetores, mas em c++:

// valarray::sum example
#include <iostream>     // std::cout
#include <valarray>     // std::valarray

int main ()
{
  int init[]={10,20,30,40};//este vetor deve receber os valores a serem somados
  std::valarray<int> myvalarray (init,4);
  std::cout << "The sum is " << myvalarray.sum() << '\n';
  return 0;
}

Não testei o código pois não sei c(++, #)

Apenas para fins de comparação, a codificação em java:


Outro exemplo de função em java, restrito a apenas dois valores: Double.sum(5, 6);
Obs.: mesmo que não seja visto o sinal de +, a operação só é possível usando a soma, seja ela implícita (como nos exemplos acima, ou explícita).
Mesmo em casos onde não se utiliza o sinal +, a operação é de soma, inclusive nos laços de repetição quando se pega o valor preexistente e o soma com um novo valor, ex: a = a + 1, ou a++;
Não creio na existência de uma função matemática que atenda este devaneio.
Restando apenas pegar uma função nativa da linguagem que realize a soma indiretamente.

Pensei em função nativa também, más no caso do C, C++ ou C# não conheço tal função que faço essa operação tão simples. E se a colega cria-se seu método que retornaria esse resultado, consequentemente nesse ela usaria o operador de som + rsrsrs.

Intrigante esse problema, só consigo pensar em entrada de dados decimal, converter em binário e realizar a soma binária convertendo o resultado dessa operação em decimal.

Ou talvez o professor pediu apenas para ela criar sua primeira função que recebe dois parâmetros, calcula-se a soma destes e retorna o resultado. Sei lá, quero pensar que foi isso.

Seria necessário um operador que permitisse a soma binária diretamente, caso contrário só sobra o operador +.
KO pra esse tópico -> :dizzy_face:

Tá na mão:

int soma_bitwise(int x, int y) {
  return y ? soma_bitwise(x ^ y, (x & y) << 1) : x;
}
1 curtida

[quote=“lvbarbosa, post:15, topic:352031, full:true”][/quote]

Perfeito! Isso resolveu seu problema @Jane_Thais_Oliveira

É uma bela codificação.
Tomará que professor dela não seja meio pardal, pois a recursividade é equivalente a um laço de repetição.

A meu ver esse professor parece ser daqueles que pedem coisas absurdas e desnecessárias aos alunos, simplesmente para inflar o ego ao invés de concentrar sua didática em assuntos úteis para o dia a dia…

Longe de criticar e até parabenizo aos colegas por mostrarem soluções que atendem, mas onde se faz necessário esse tipo de uso, se a linguagem fornece os operadores para isso?

rsrsrs. Realmente um problema maio sem pé nem cabeça, pra que dispensar os operadores aritméticos?
A não ser que ele estive-se querendo abordar justamente a recursividade, operação ternária e operações bit a bit. Não sei se o professor já havia abordado loops, más para chegar a resolução desse problema foi visto tudo isso acima citado.

Eu não sei pra onde C vai, então fica pra quem sabe.

funcao soma = x + y
soma = x(x/x + y/x)
soma = x(1 + y/x)

Como um em binário é justamente 1:
a) se puder dividir x/y; e
b) na instrução seguinte somar 1 em binário, sem usar laço de repetição; e
c) depois multiplicar por x, o resultado será obtido.
Minha impressão é que somar 1 em binário a x/y não necessitaria de laço de repetição, pois 1 bit é suficiente para a representação de 1.
Como dito, fica pra quem sabe.
Té mais.