主题:[原创]输出2的100次方个数字,怎么办?
			
 巧克力公主
				 [专家分:0]  发布于 2010-10-08 17:43:00							
			[em1]
						
					 
		
			
回复列表 (共5个回复)
		
								
				沙发
				
					
cgl_lgs [专家分:21040]  发布于 2010-10-08 23:19:00				
				高精度乘法。
							 
						
				板凳
				
					
josephkwok [专家分:530]  发布于 2010-10-25 10:05:00				
				大概思想是这样的.其实就是编码而已.
用1个int数组(也可以是其他),每个int记录一定个数的数字,例如5个,
如果int a[3];
a[0]=1;a[1]=2;a[2]=3;
那么我们就约定a表示10进制数123,那这个a最大能表示的10进制数是
999999999999999,总共15个9.
现在解析下乘法
如果a[0]=0;a[1]=1;a[2]=50000;
那么a就表示150000,然后a*2.
就将a的所有元素乘以2,得a[0]=0;a[1]=2;a[2]=100000;
a[2]超过1开始约定的5位,进位得a[0]=0;a[1]=3;a[2]=0;
所以这时的a表示300000了
							 
						
				3 楼
				
					
1054122 [专家分:750]  发布于 2010-11-05 21:12:00				
				不用高精度乘法,直接高精度幂
							 
						
				4 楼
				
					
1054122 [专家分:750]  发布于 2010-11-05 21:13:00				
				程序在这里
							 
						
				5 楼
				
					
1054122 [专家分:750]  发布于 2010-11-05 21:14:00				
				
[code=c]
#include <iostream>
using namespace std;
int main()
{
    int k[1000] = {0} , p = 0 , c = 0;
    k[1] = 1;
    for (int i = 1 ; i <= 100 ; i++)
    {
        for (int j = 1 ; j <= 999 ; j++)
        {
             k[j] = k[j] * 2 + p;
             if (k[j] >= 10)
             {
                  k[j] = k[j] - 10;
                  p = 1;
             }
             else
                  p = 0;
        }
    }
    for (int i = 999 ; i >= 1 ; i--)
    {
         if (k[i] != 0)
              c = 1;
         if (c)
              cout << k[i];
    }
    cout << endl;
    system("pause");
    return 0;
}[/code]
							 
									
			
我来回复