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
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
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…
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.
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.