Hello, OnlineGDB Q&A section lets you put your programming query to fellow community users. Asking a solution for whole assignment is strictly not allowed. You may ask for help where you are stuck. Try to add as much information as possible so that fellow users can know about your problem statement easily.

I can't figure out why this code is not outputting properly?

0 votes
asked Jul 13, 2018 by anonymous

/* Question:  You are required to write code that does the following:-

1. Find out the sum of the squares of the digits of the rpm
2. Multiply the number obtained in (1) by 323
3. Do a cyclic right shift of digits of the rpm i.e. 
    if Number is 1234, after cyclic right shift, the number will be 4123. 
    Thereafter, take the last two digits of the number obtained just now, and add it to the number obtained in point 2. Thus, obtaining a new rpm value.
4. Do these steps till the number of years are 10 or the harddisk has reached the maximum RPM

long long int rpm: Original value of RPM
int years: Store the number years that have elapsed
long long int finalRPM: Store the modified value of RPM i.e. the final of RPM */

void solutionRPM(long long int rpm, int &years, long long int &finalRPM) {

    //Write your solution code below this line
int sqdRPM, sqdNumber_result, shiftRPM, remainRPM, numdigit, rpmDivide, rpmResult, twodigitsRPM, originalRPM, powerOne, i;
rpmDivide = rpm;
originalRPM = rpm;
remainRPM = rpm%10;
sqdRPM = rpm;
sqdNumber_result = 0;
years = 1; 
while ((years<=10) && (finalRPM<=(originalRPM*8))){
    while (sqdRPM != 0) {
        sqdNumber_result = sqdNumber_result + (sqdRPM % 10)*(sqdRPM % 10); sqdRPM = sqdRPM/10;
} //finding sum of squares of digits of rpm
    sqdNumber_result = sqdNumber_result*323; //multiply sum of squares by 323
    while (rpmDivide!=0){
        rpmResult = rpmDivide/10; rpmDivide = rpmResult;
    } //counting number of digits in rpm
    for (i=0, powerOne=1; i<=(numdigit-1); i++){
    powerOne = powerOne*10;
    } //raising 10 to power of numdigit-1, storing in powerOne
    int shiftRPM = (remainRPM)*(powerOne) + (rpm/10); //cyclic right shift of digits
    twodigitsRPM = shiftRPM%(powerOne/10); //extracting last two digits
    finalRPM = twodigitsRPM + sqdNumber_result; //calculating final RPM
    sqdRPM = finalRPM;
    rpm = finalRPM;
    numdigit=0;//substituting modified RPM for rpm in the next iteration 

some error's I'm getting are: 

Input rpm:8232

Your output:The harddisk is likely to crash after 1 years, with RPM of 6303968 

Expected output:The harddisk is not affected with the bug. Tested for 10 Years. Final RPM is: 14882

Input rpm:7653

Your output:The harddisk is likely to crash after 1 years, with RPM of 140623784113152 Expected output:The harddisk is likely to crash after 3 years, with RPM of 68252

Output does not match

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
Anti-spam verification:
To avoid this verification in future, please log in or register.
Welcome to OnlineGDB Q&A, where you can ask questions related to programming and OnlineGDB IDE and and receive answers from other members of the community.