C语言:整数进制转换

进制转换的主要思想是利用n1进制转换到10进制再转换到n2进制,第一步用了“×2∧x”,第二步用了“除x取余”。

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     long long int redix, prenum, acumunum, r_redix, term, i, quotient, residue;
 5     long long int j, termnum, rterm, rquotient, rresidue; 
 6     
 7     printf("Please input the number:");//不大于9223372036854775807 
 8     scanf("%lld", &prenum);
 9     printf("\nPlease input the redix:");//应当介于1和10之间 
10     scanf("%lld", &redix);
11     printf("\nPlease input the wanted redix:");//应当介于1和10之间
12     scanf("%lld", &r_redix);
13     
14     if(redix!=10)//redix进制数转10进制数 
15     {
16         const long int R=redix;
17         term=10;
18         residue=prenum%10;
19         quotient=prenum/10;
20         termnum=residue*term/10;
21         printf("\nT\tQ\tR\n");
22         printf("%lld\t%lld\t%lld\n", termnum, quotient, residue);//TEST
23         for(i=1;quotient>0;i++)
24         {
25             if(term>prenum)    
26                 break;
27             term*=R;
28             residue=quotient%10; 
29             quotient/=10;
30             termnum=termnum+residue*term/10;
31             printf("%lld\t%lld\t%lld\n", termnum, quotient, residue);//TEST
32         }
33     }
34     printf("%lld\t%lld\t%lld\n\n", termnum, quotient, residue);//TEST
35     
36     const long int RE=r_redix;//十进制整数转RE进制数 
37     rterm=1;
38     rresidue=termnum%RE;
39     rquotient=termnum/RE;
40     acumunum=rresidue*rterm;
41     printf("%lld\t%lld\t%lld\n", acumunum, rquotient, rresidue);//TEST
42     for(i=1;rquotient>0;i++)
43     {
44         for(j=0,rterm=1;j<=i;j++)
45             rterm*=10;
46         rresidue=rquotient%RE;
47         rquotient/=RE;
48         acumunum+=rresidue*rterm/10;
49         printf("%lld\t%lld\t%lld\n", acumunum, rquotient, rresidue);//TEST
50     }
51     
52     printf("\nThe number after transformation is:%lld\n", acumunum);
53     
54     return 0;
55 }