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.Citação:
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:Citação:
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;
}
