(c++) Ha bekérek egy egész számot, hogyan írassam ki a számot a magyar (kp) fizetési szabályok szerint?
pl.:
input: 17 (ft)
output: 20 (ft)
Vagyis ,vagy 5-re vagy 0-ra végződik a kerekítés után.
switch (amount % 10) {
case 1:
case 6: amount-=1; break;
case 2:
case 7: amount-=2; break;
case 3:
case 8: amount+=2; break;
case 4:
case 9: amount+=1; break;
}
Szerintem az öttel való egészosztás modulusát nézd. Ha nagyobb 2-nél, akkor kerekíts felfelé. Nincs kéznél C++, hogy kipróbáljam, de ilyesmit képzelek:
kerekitett = penz / 5 * 5;
if (penz % 5 > 2) {kerekitett += 5;}
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main(){
for (int i = 0; i < 31; i++) cout << i << " --> " << (int)round(i / 5.0) * 5 << endl;
system("PAUSE");
return 0;
}
Az én változatom, modulussal:
#include <iostream>
using namespace std;
int main(){
for (int i = 1; i < 31; i++) cout << i << " --> " << i / 5 * 5 + (i % 5 > 2) * 5 << "\n";
cin.get();
return 0;
}
Akkor már én is ideköpök egy megoldást
#include <iostream>
int main()
{
int inputValue;
std::cout<<"Blahblah gimmemony! ";
std::cin>>inputValue; //A userek robotok, és mindig korrekt számot adnak be
char inputModulus = inputValue % 5;
int outputValue = inputModulus > 2 ? inputValue + (5-inputModulus) : inputValue - inputModulus;
std::cout<<"Blahblah takeyomonet "<<outputValue;
return 0;
}
Az osztás-visszaszorzás nekem picit olyan bleh.
@#5:
Rémes a dumád, de a lényeg tetszik. És igazad is van, az osztás-szorzás tényleg elég nyögvenyelős megoldás.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!