Stai moltiplicando un int (16 bit) per 10000 ed il risultato è superiore al valore che può entrare in un int (la tua moltiplicazione è tra due int, solo il risultato viene messo nel long).
La forma per farla funzionare è: long kk=((long)k * (long)10000); ... così dichiari la moltiplicazione tra due long.
Guglielmo
P.S. La cosa più pulita è fare quanto suggerito da Standardoil e dichiarare anche k come long, senza tanti cast
Zamundo:
kk anzicchè mostrare il corretto valore 40000 mostra l'inspiegabile -25536
Non è inspiegabile, la rappresentazione binaria di 40000 è la stessa di -25536, se usi una variabile 'int' (16 bit con segno) il massimo valore positivo è 32767, se superi questo massimo entri nei numeri negativi, il risultato è corretto