算法题(7):n进制乘法表
审题:
我们需要根据用户输入的n来确定输出什么进制的乘法表
思路:
第一步:确定内外层循环来获取数据
外层循环为行,内层循环为列,且循环次数都是n-1
第二步:进行十进制的运算
第三步:进行进制转换
进制转换需要单独写一个函数来实现
解题:
(1)获取数据并进行十进制运算
1.让i和j都初始化为1:因为都是从1开始运算的
2.让j<=i作为结束条件:由于列是始终随着i的增加而增加的,所以到最后j会等于i,所以用它来当循环结束条件
(2)进行进制转换
注意点:
1.当进制大于十的时候我们就需要使用大写字母去表示了,而既然需要用到字母,我们的数据就采用字符串的形式进行转换。(如果是不涉及字符可以使用数字拼接法)2.增加完数据之后需要再逆转一下,这样子才是正确的顺序
这里进制转换用的是取余循环相除法
具体来说就是让需要转换的十进制数每次除n(直到等于0停止)(n是需要转换的进制),取得余数最后从下往上依次排列就是转换后的进制。
这是十进制413转换为三进制的过程,所以转换后就是120022
完整代码:
#include<iostream> using namespace std; #include<string> #include<algorithm> string exchange(int num,int n)//进制转换 {int val = 0;string str;char c ;while (num > 0){val = num % n;if (val >= 10){c = 'A' + (val-10);}else{c = val + '0';}str += c;//逆序加num = num / n;}reverse(str.begin(), str.end());return str; } int main() {int n = 0;int num = 0;int val = 0;cin >> n;for (int i = 1; i <= n - 1; i++)//行{for (int j = 1; j <= i ; j++)//列{num = i * j ;//十进制numstring s = exchange(num, n);cout << exchange(i, n) << '*' << exchange(j, n) << '=' << s << ' ';}cout << endl;} }