Eu denovo aqui ;S
Agora tenho um problema estranho, o que eu tenho que fazer é receber um número (de até 1000 digitos) e dizer se ele é multiplo de 11.
Como devem saber nenhuma variavel em C++ suporta isso, então recebi o numero como uma string e usei cada caracter como se fosse um número, após isso apliquei uma propriedade de números divisiveis por 11, que é:
Compilei, rodou, testei com números realmente grandes (11^900) e deu certo, mas o maldito site insiste que minha resposta está errada.Se a soma dos algarismos de posições pares e a soma dos algarismos de posições ímpares tiverem o mesmo resto da divisão por onze, então o número tomado é divisível por onze.
problema:
código que fiz até agora:A sua tarefa é, dado um número positivo N, determinar se ele é um múltiplo de onze.
Entrada
A entrada é um arquivo onde cada linha contém um número positivo. Uma linha contendo o número 0 sinaliza o fim da entrada. Os números dados podem conter até 1000 dígitos.
Saída
A saída do programa deve indicar, para cada número da entrada, se ele é um múltiplo de onze ou não.
Exemplo de Entrada
112233
30800
2937
323455693
5038297
112234
0
Exemplo de Saída
112233 is a multiple of 11.
30800 is a multiple of 11.
2937 is a multiple of 11.
323455693 is a multiple of 11.
5038297 is a multiple of 11.
112234 is not a multiple of 11.
Código:#include <iostream> #include <stdio.h> #include <string> #include <string.h> int main(){ char numero[1005][1005]; //array de string int par=0, impar=0,posPar=0,posImpar=1,i =0,z,gl; //variaveis auxiliares bool validados[1005]; //variavel para validar o numero scanf("%s", numero[0]); //enquanto não for informado zero, fazer: while(strcmp(numero[i],"0")!=0){ int numEditTamanho = strlen(numero[i]); //arrancando zeros a esquerda while(numero[i][0] == '0') for(gl=0;numero[i][gl]!='\0';gl++) numero[i][gl] = numero[i][gl+1]; //pegando resto se o numero for pequeno if (atol(numero[i]) < 1000000000) { if (atol(numero[i]) % 11 == 0) validados[i] = true; else validados[i] = false; //caso seja muito grande, fazer a somatoria dos digitos pares e impares } else { while(posPar < numEditTamanho && posImpar < numEditTamanho){ if (posPar < numEditTamanho) par += numero[i][posPar] - 48; if (posImpar < numEditTamanho) impar += numero[i][posPar] - 48; posPar += 2; posImpar += 2; } //se o resto da divisão por 11 dos 2 forem iguais, então é divisivel por 11 if ((par % 11) == (impar % 11)) validados[i] = true; else validados[i] = false; //zerando variaveis para o próximo loop par=0; impar=0; posPar=0; posImpar=1; } //incrementando contador do loop, e lendo próximo numero i++; scanf("%s", numero[i]); } //exibindo resultados for (z =0; z <i ; z++ ){ std::cout<<"\n"; if (validados[z]) std::cout<<numero[z]<<" is a multiple of 11."; else std::cout<<numero[z]<<" is not a multiple of 11."; } return 0; }
Publicidade:
Jogue Tibia sem mensalidades!
Taleon Online - Otserv apoiado pelo TibiaBR.
https://taleon.online







Curtir: 



Responder com Citação