您的位置:首页 > 其它

关于数值统计的几个算法

2017-08-01 00:21 197 查看
类别已经说明了,这是很基础的一些东西,具体如下:

由两大部分——求某一区间范围内的所有数值之和 +  求单个整数的各个位的数值之和/积。

//首三行目的:使各文件只能被编译一次
#pragma once
#ifndef Programming_Experience_CountingHelper_H
#define Programming_Experience_CountingHelper_H

//计算某一区间内的各数之和
// 原先想直接用long long类型,但突然觉得可以泛型化的,两者都用。

typedef long long LL;
LL numberCounting(LL left, LL right) {
LL temp = 0;
for (LL i = left; i <= right; ++i) {
temp += i;
}
return temp;
}

//单个数的各个位数的求和/乘积

template <typename T>
T numberCounting(T n,char ch) {

T temp;

switch (ch){
case '*': {
temp = 1;
while (n) {
temp *= (n % 10);
n /= 10;
}
break;
}
case '+': {
temp = 0;
while (n) {
temp += (n % 10);
n /= 10;
}
break;
}
}
return temp;
}

#endif // ! Programming_Experience_CountingHelper_H


.h文件的设计只是为了方便测试数据,具体设计完全自由,变动很大。
//有关数字统计(十进制数)的一些算法设计
//Created by Ant on 25/07/2017
//
#include <iostream>
#include <cstdio>
#include <cassert>
#include "CountingHelper.h"
using namespace std;

int main() {

long long m, n;
cin >> m >> n;
assert(m <= n);

printf("区间[%lld,%lld]上各数之和为:\t%lld\n", m, n, numberCounting(m, n));

cout << m << "的各个位的数值之和为:\t" << numberCounting(m,'+') << endl;
cout << n << "的各个位的数值之和为:\t" << numberCounting(n, '+') << endl;

cout << m << "的各个位的数值的乘积为:\t" << numberCounting(m, '*') << endl;
cout << n << "的各个位的数值的乘积为:\t" << numberCounting(n, '*') << endl;

return 0;
}



这是一个简单的测试样例的运行结果:



喂丸待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息