【发布时间】:2015-09-25 19:57:04
【问题描述】:
我正在尝试创建一个能够计算任何数字的校验和的函数,包括浮点数。
例如:
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 作为校验和的结果永远持续下去。
更新
不幸的是,对于这个项目,C++ 不够精确。例如。如果我计算0.703125 / 2,那么结果将是0.3515625,但在C++ 中,结果是0.351563。
我的代码:http://www.pasteall.org/61345/cpp
【问题讨论】:
-
看起来任何负参数都会产生 0 的校验和。这是有意的吗?
-
为什么不从位表示创建校验和?
-
您希望 380、180、38、18、9 和 90 都具有相同的校验和?为什么?!
-
@DavidSchwartz ?是什么让你这么认为?
-
你有一个递归调用。不需要循环。