万进制

本文探讨了万进制计算的概念及其实现方法,通过具体示例详细解释了如何进行万进制下的乘法运算,并提供了相应的AC代码。

表示刚开始了无思路!后来看了下讨论,发现了"万进制"。觉得奇妙,记下吧。

        这题也让我有了点想法。我们经常用的进制就是2进制、8进制、10进制和16进制。何来“万进制”?世上本无,有人喊了也就有了。呵呵

        现在来谈谈自己对进制的一点不成熟的想法。计算机能“识别”0和1,人能识别0、1、2、3、4、5、6、7、8、9以及其多位组合。那么,

  为啥就单单有2、8、10、16这几个进制。我想并不止这几个,10进制是我们日常生活沿用来了的,难道来个5进制就不行?当然不是,不过

  一切以方便优先罢了!2进制是因为方便计算机识别才兴起的,5000年前应该不会有2进制!8进制和16进制又因何2进制有天然联系,所以

  也出现了用途,2^3=8、2^4=16(例:这在《数字逻辑》中关于编码方面有相关应用)。

         就题论题。再来谈谈1042的万进制。也以一个例子来说明:

         107924372*15=1618865580。

         ①上面的乘法如果运用10进制,很简单。

         ②万进制呢?

               首先存数:a[0]=4372,a[1]=792,a[2]=1。107924372,从低位到高位每四位存到一个数组元素中。此时,总位数为3。

               接着运算:a[0]*15=65580,所以进位为a[0]/10000=6,a[0]=a[0]%10000=5580。a[1]*15=11880,a[1]=a[1]+6=11886。

                                 进位为1,a[1]=1886。a[2]*15=15,a[2]=a[2]+1=16,进位为0。

               输出:a[2],a[1],a[0]即为1618865580。要注意的是:如果a[2]=886,那么该如何输出?直接输出:168865580。显然不对,

                          正确的是16088655880。输出的原则是:最高位原样输出,其它位如果小于1000,则高位补0,一位一补。

 

          好了,不啰嗦了。AC代码:

[cpp]  view plain  copy
 print ?
  1. /*万进制*/  
  2. #include<iostream>  
  3. #include<iomanip>  
  4. using namespace std;  
  5.   
  6. int main()  
  7. {  
  8.     void factorial(int n);  //阶乘函数  
  9.   
  10.     int n;  
  11.   
  12.     while(cin>>n)  
  13.         factorial(n);  
  14.       
  15.     return 0;  
  16. }  
  17.   
  18. void factorial(int n)  
  19. {  
  20.     int a[10001];    
  21.     int places,carry,i,j;  
  22.   
  23.     a[0]=1;  
  24.     places=0;   //当前数的总位数  
  25.     for(i=1;i<=n;i++)  
  26.     {  
  27.         carry=0;   //进位  
  28.   
  29.         for(j=0;j<=places;j++)  
  30.         {  
  31.             a[j]=a[j]*i+carry;  
  32.             carry=a[j]/10000;  
  33.             a[j]%=10000;  
  34.         }  
  35.   
  36.         if(carry>0)  //如果一个数的总前一位大于一万,则向前进位  
  37.         {  
  38.             places++;  
  39.             a[places]=carry;  
  40.         }  
  41.     }     
  42.   
  43.     /* 
  44.       输出 
  45.       最高位原样输出, 
  46.       其他位小于1000的,高位补0 
  47.     */  
  48.     cout<<a[places];  
  49.     for(i=places-1;i>=0;i--)  
  50.         cout<<setw(4)<<setfill('0')<<a[i];  
  51.   
  52.     cout<<endl;  
  53. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值