产生任意进制乘法表的程序代码

104 篇文章 8 订阅

现在的小学生从二年级上学期开始学习九九乘法口诀表,不知道大家想过这个问题没有,就是为什么乘法口诀表是十进制的呢?当然是因为我们从小学习算术是从十进制记数开始的,但是为什么人们选择了十进制来记数呢?

实际上,以十为基底的十进制数字可以变成任何其它基底的数字,一般规则是,假如目标数基底为S,用S连续除以十为基底的整数Z,所的的与数将是在以S为基底的系统中的数码。

既然选择任何一个基底都可以,那么究竟选择那个基底最合适呢?太小的基底有它的不方便之处,而大的基底要求记住更多的数字符号,并且乘法表更大。最终人们选择十作为基底不是没有原因的,回溯到文明初期,人们就开始使用十进制计数了,而且毋庸置疑这是由于我们只有十个手指头进行计算的缘故。

如果人们习惯算上脚趾,说不定也会发展出20进制的计算系统,下面一段程序就是产生二十进制乘法口诀表的程序:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string.h>
using namespace std;

string twentysignal(int a)
{
	stringstream ss;
	ss << a;

	string s1 = ss.str();

	if(a == 10)
		return "A";
	else if(a == 11)
		return "B";
	else if(a == 12)
		return "C";
	else if(a == 13)
		return "D";
	else if(a == 14)
		return "E";
	else if(a == 15)
		return "F";
	else if(a == 16)
		return "G";
	else if(a == 17)
		return "H";
	else if(a == 18)
		return "I";
	else if(a == 19)
		return "J";
	else
		return s1;
}

string twentytrans(int a)
{
	int b, c;
	b = a%20;
	c = a/20;

	string result;
	if(c == 0)
		result = twentysignal(b);
	else
		result = twentysignal(c) + twentysignal(b);

	return result;
}

int main(void)
{
	ofstream fout("matrix.txt");
	int i, j;

	int data[19][19];

	memset(data, 0x00, 19*19);

	for(i = 0; i < 19; i ++)
	{
		for(j = 0; j < 19; j ++)
		{
			data[i][j] = (i + 1) * (j + 1);

			//fout.fill('0');
			//fout.precision(2);
			fout.width(2);
			fout << twentytrans(data[i][j]) << " ";
		}
		fout << endl;
	}

	fout.close();
	return 0;
}

编译后运行:

 得出,二十进制的乘法口诀表如下:

 1  2  3  4  5  6  7  8  9  A  B  C  D  E  F  G  H  I  J 
 2  4  6  8  A  C  E  G  I 10 12 14 16 18 1A 1C 1E 1G 1I 
 3  6  9  C  F  I 11 14 17 1A 1D 1G 1J 22 25 28 2B 2E 2H 
 4  8  C  G 10 14 18 1C 1G 20 24 28 2C 2G 30 34 38 3C 3G 
 5  A  F 10 15 1A 1F 20 25 2A 2F 30 35 3A 3F 40 45 4A 4F 
 6  C  I 14 1A 1G 22 28 2E 30 36 3C 3I 44 4A 4G 52 58 5E 
 7  E 11 18 1F 22 29 2G 33 3A 3H 44 4B 4I 55 5C 5J 66 6D 
 8  G 14 1C 20 28 2G 34 3C 40 48 4G 54 5C 60 68 6G 74 7C 
 9  I 17 1G 25 2E 33 3C 41 4A 4J 58 5H 66 6F 74 7D 82 8B 
 A 10 1A 20 2A 30 3A 40 4A 50 5A 60 6A 70 7A 80 8A 90 9A 
 B 12 1D 24 2F 36 3H 48 4J 5A 61 6C 73 7E 85 8G 97 9I A9 
 C 14 1G 28 30 3C 44 4G 58 60 6C 74 7G 88 90 9C A4 AG B8 
 D 16 1J 2C 35 3I 4B 54 5H 6A 73 7G 89 92 9F A8 B1 BE C7 
 E 18 22 2G 3A 44 4I 5C 66 70 7E 88 92 9G AA B4 BI CC D6 
 F 1A 25 30 3F 4A 55 60 6F 7A 85 90 9F AA B5 C0 CF DA E5 
 G 1C 28 34 40 4G 5C 68 74 80 8G 9C A8 B4 C0 CG DC E8 F4 
 H 1E 2B 38 45 52 5J 6G 7D 8A 97 A4 B1 BI CF DC E9 F6 G3 
 I 1G 2E 3C 4A 58 66 74 82 90 9I AG BE CC DA E8 F6 G4 H2 
 J 1I 2H 3G 4F 5E 6D 7C 8B 9A A9 B8 C7 D6 E5 F4 G3 H2 I1 

总结

为了使用二十进制,我们需要再对“A,B,C,D,E,F,G,H,I,J”共十个符号进行命名并且记住,这还不够,我们还需要对20个20,20个20个20,等等整数单位进行命名,何其麻烦。


结束!

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值