2015-09-29 3 views
0

Ce fut le problème m'a donné:exposants Être une méthode sans utiliser Math.pow()

méthode Create lastDigit qui est passé deux entiers positifs. Le premier entier est la base et le second entier est l'exposant. lastDigit retournera le dernier chiffre de la base^exposant. Vous devez réfléchir avant d'écrire votre code. Astuce: Vous n'avez pas besoin de trouver le produit de base^exposant.

Puis-je utiliser la méthode pour trouver répondre aux questions ci-dessous:

1) Quel est le dernier chiffre de 3 400 livres? 2) Quel est le dernier chiffre de (3^0) (3^1) (3^2) (3^3) ... (3^10)? 3) Quel est le dernier chiffre du produit de (3^0) (3^1) (3^2) ... .. (3^400)?

Voici le code que j'ai écrit:

public static int lastDigit(int m, int n){ 
    int p=1; 
    for(int i=1; i<=n; i++) 
     p=p*m; 
    return p%10; 
} 

Cependant, quand je tentais de trouver les réponses aux questions, je continue à obtenir -1 pour la première et troisième questions, et 1 pour la deuxième question . Y at-il un problème avec le code, ou comment puis-je obtenir la bonne réponse?

+2

trop-plein. Changez 'p = p * m' en' p = (p * m)% 10' – andars

+2

Si vous pensez plus fort, vous trouverez un moyen d'obtenir la réponse sans rien multiplier (en temps constant). Astuce: écrivez les dix premières puissances de 3. – Roman

Répondre

1

La variable int déborde. Essayez de remplacer p=p*m par p=(p*m)%10.

2

Vous ou un programme que vous avez écrit peut souffrir de débordement d'entier.

Ceci est causé par une limitation chronique du type int.

Les symptômes comprennent

  • entiers négatifs qui sont vraiment censés être positifs

  • Un petit nombre qui sont censés être grand

Cette condition peut être contrôlée en veillant à ce que vos valeurs int ne dépassent pas 2 milliards.

Si les symptômes persistent, consultez un débogueur ou imprimez des valeurs intermédiaires. * Les effets secondaires peuvent inclure la frustration, le fait de jeter votre ordinateur par une fenêtre, et/ou de supprimer des fichiers système importants.

Mais en réalité, disons que vous avez une base de sept.

7 = 7

7 * 7 = 49

49 * 7 = 343

Le dernier chiffre est 3.

Cependant, si vous, ne prenez que le dernier chiffre entre les opérations,

7 * 7 = 49 -> 9

9 * 7 = 63

Le dernier chiffre est encore trois. Cela permet de maintenir le nombre bien en dessous de la limite int.

Ceci est en fait ce que la solution p=(p*m)%10; est:

p=   (p*m)         %10  
    multiply the previous digit by the exponent  take the last digit 
+0

Pouvez-vous me montrer à quoi ressemblerait ce code? – Maria

+2

@Maria C'est à peu près la même chose que l'autre réponse, mais j'ai ajouté l'exemple. –