题目描述
九九乘法表是学习乘法时必须要掌握的。在不同进制数下,需要不同的乘法表。
例如, 四进制下的乘法表如下所示:
1*1=1
2*1=2 2*2=10
3*1=3 3*2=12 3*3=21
请注意,乘法表中两个数相乘的顺序必须为样例中所示的顺序,不能随意交换两个乘数。
给定 P,请输出 P 进制下的乘法表。
输入格式
输入一个整数 P。
输出格式
输出 PP 进制下的乘法表。PP 进制中大于等于 1010 的数字用大写字母 A
、B
、C
、⋯ 表示。
思路
可以由十进制转任何进制入手,根据连除法将十进制转化为任何进制,连除法即被除数处于进制p余数为进制的n位上的数(n=p^i,i∈[0,+∞],i∈z),分两种情况当进制<10时和进制>=10,一种输出整型一种输出字符型。
代码
1 #include <stdio.h> 2 void jinzhi(int,int); 3 void jinzhizimu(int,int); 4 int main(){ 5 int p; 6 int i,j; 7 scanf("%d",&p); 8 for(i=1;i<p;i++){ 9 for(j=1;j<=i;j++){ 10 if(p<=9){ 11 printf("%d*%d=",i,j); 12 jinzhi(i*j,p); 13 } 14 else { 15 if(i>=10&&j<=9){ 16 printf("%c*%d=",'A'+i-10,j); 17 }else if(i>=10&&j>=10){ 18 printf("%c*%c=",'A'+i-10,'A'+j-10); 19 }else{ 20 printf("%d*%d=",i,j); 21 } 22 jinzhizimu(i*j,p); 23 24 } 25 if(j!=i)printf(" "); 26 else printf("\n"); 27 } 28 } 29 return 0; 30 } 31 32 void jinzhi(int x,int p){ //连除法 33 int a[100]; 34 int num=0; 35 int i; 36 do{ 37 a[num++]=x%p; 38 x=x/p; 39 }while(x!=0); 40 41 for( i=num-1;i>=0;i--){ 42 printf("%d",a[i]); 43 } 44 } 45 46 void jinzhizimu(int x,int p){ //与前面一种类似不过要进行转化(int->char) 47 char a[100]; 48 int sum; 49 char c; 50 int num=0; 51 int i; 52 do{ 53 sum=x%p; 54 if(sum>=10){ 55 a[num++]=('A'+sum-10); //大于10转化为A--E; 56 }else{ 57 a[num++]='0'+sum; //小于10转化为字符型0--9; 58 } 59 x=x/p; 60 }while(x!=0); 61 for( i=num-1;i>=0;i--){ 62 printf("%c",a[i]); 63 } 64 }
标签:10,进制,int,P8723,蓝桥,num,printf,乘法表 From: https://www.cnblogs.com/Amon01/p/17053908.html