Я пытаюсь создать функцию, которая способна вычислять контрольную сумму любого числа, включая числа с плавающей запятой.Вычислить контрольную сумму номера точки
Например:
360° = 3+6+0 = 9
180° = 1+8+0 = 9
90° = 9+0 = 9
45° = 4+5 = 9
22.5° = 2+2+5 = 9
11.25° = 1+1+2+5 = 9
5.625° = 5+6+2+5 = 18 = 1+8 = 9
2.8125° = 2+8+1+2+5 = 18 = 1+8 = 9
1.40625 = 1+4+0+6+2+5 = 18 = 1+8 = 9
0.703125 = 0+7+0+3+1+2+5 = 18 = 1+8 = 9
0.3515625 = 0+3+5+1+5+6+2+5 = 27 = 2+7 = 9
0.17578125 = 0+1+7+5+7+8+1+2+5 = 36 = 3+6 = 9
...
Я написал этот небольшой код, который вычисляет контрольную сумму целочисленной:
#include<iostream>
using namespace std;
int checksum(int param)
{
int sum = 0;
while (param > 0)
{
sum += param % 10;
param /= 10;
}
while (sum > 9) { sum = checksum(sum); }
return sum;
}
int main()
{
int number = 0;
cout<<"Enter number:"<<endl;
cin>> number;
cout<< checksum(number);
cin.get(); cin.get();
return 0;
}
Как я могу улучшить его, так что он также работает с числами с плавающей точкой ?
фон
Я пытаюсь выяснить, если это правда, что картина из моего примера будет продолжаться вечно с результатом 9 в качестве контрольной суммы.
Update
Unfortunattely C++ не является достаточно точным для этого проекта. Например. если я вычислил 0.703125/2
, тогда результат будет 0.3515625
, но в C++ результат 0.351563
. Мой код: http://www.pasteall.org/61345/cpp
Похоже, что любой отрицательный параметр даст контрольную сумму 0. Это предназначено? –
Почему вы не создаете контрольную сумму из представления бит? –
Вы хотите, чтобы у 380, 180, 38, 18, 9 и 90 у всех была такая же контрольная сумма? Зачем?! –