- 一,进制转换
这种问题理解了数学原理就很容易用实现,就可以把任意m进制数转为k进制数
举例 1011 ,(定义:10的第一位的权值为2,位权值为1*2)
1)先把它转为十进制数
我们要先从个位开始计算该为位权值,很巧的是,m进制数的所有最末位的权值为1,故最末位的位权值都为m*1
不过倒数第二位时它的值可能变化,权值一定会变化,第一个变化的值我们可以用之前学的%和/ 不断选取不同的位,
第二个变化的值就必须要用一个变量来规律的存储,同时总位权值也要用变量存储
#include<cstdio>
int main(){
int m,n;
printf("请输入要转变的进制和对于进制码");
scanf("%d %d",&n,&m);
int s=0,q=1;
while(m!=0){
s=s+(m%10)*q;
m=m/10;
q=q*n;
}
printf("该进制码代表的十进制数为%d",s);
}
2)将十进制转化为k进制数
这里就相对来说比较简单,需要了解的就是除基取余法,需要注意的是要用到数组存储方能实现逆置,还蛮有意思的。
#include<cstdio>
int main(){
int A,B,D;
scanf("%d%d%d",&A,&B,&D);
int C[50],y;
int m=0;
y=A+B;
do{
C[m++]=(y)%D;
y=y/D;
}while(y!=0);
for(int i=m-1;i>=0;i--){ //注意一下 计算机填充的顺序,其实也是操作的顺序
printf("%d",C[i]);
}
}
- 二,九九乘法表
这个问题算是大二的时候编程课和林可开玩笑的经典对话语,“九九乘法表会了没?”,哈哈哈,
所以今天想着实现一下,发现很简单但又切实学到了一些东西
1.for循环内变量的范围
for(int i=0;i<9;i++){ //这个i只在它有的小括号和中括号内有效
语句
}
2.printf的输出结果和格式输出
1.输出的每个数都要%xx和变量一一对应, 不要只想着输出的最终量,9*9=81 ,9 和 9输出格式不能省去
2.%2d, %02d 这两个在对齐输出中的作用 //其实对于浮点数还有%.2d 意为保留2位小数输出
#include<cstdio>
int main(){
for(int i=1;i<10;i++){
for(int j=1;j<10;j++){
printf("%d*%d=%2d ",i,j,i*j);
}
printf("\n");
}
return 1;
}
浙公网安备 33010602011771号