| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 852 人关注过本帖, 1 人收藏
标题:两个超大整数的乘法
只看楼主 加入收藏
雨中芸
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
结帖率:0
收藏(1)
已结贴  问题点数:10 回复次数:4 
两个超大整数的乘法
具体要求是计算两个超大整数的乘积(按位数组)
输入两个数字字符串表示两个大整数,通过乘法、加法,实现两个大整数的乘积。
谁能帮我一下,给我一个完整的C或C++代码,谢谢哦!
搜索更多相关主题的帖子: 字符串 
2011-06-23 17:03
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
直接用 gmp 多好
2011-06-23 17:42
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:5 

#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
unsigned an1[MAX_LEN+10];
unsigned an2[MAX_LEN+10];
unsigned aResult[MAX_LEN * 2 + 10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int main()
{
    gets( szLine1); //gets 函数读取一行
    gets( szLine2);           
    int i, j;
    int nLen1 = strlen( szLine1);
    memset( an1, 0, sizeof(an1));
    memset( an2, 0, sizeof(an2));  
    memset( aResult, 0, sizeof(aResult));     
    j = 0;
    for( i = nLen1 - 1;i >= 0 ; i --)
       an1[j++] = szLine1[i] - '0';
    int nLen2 = strlen(szLine2);
    j = 0;
    for( i = nLen2 - 1;i >= 0 ; i --)
        an2[j++] = szLine2[i] - '0';
    for( i = 0;i < nLen2; i ++ )   
    { //每一轮都用 an1 的一位,去和 an2 各位相乘
     //从 an1 的个位开始
       for( j = 0; j < nLen1; j ++ )    //用选定的 an1 的那一位,去乘 an2 的各位   
          aResult[i+j] += an2[i]*an1[j]; //两数第 i, j 位相乘,累加到结果的第 i+j 位
    }
     //下面的循环统一处理进位问题
    for( i = 0; i < MAX_LEN * 2; i ++ )      
    {
        if( aResult[i] >= 10 )
        {
            aResult[i+1] += aResult[i] / 10;
            aResult[i] %= 10;
        }
    }
     //下面输出结果
    bool bStartOutput = false;
    for( i = MAX_LEN * 2; i >= 0; i -- )
        if( bStartOutput)
        printf("%d", aResult[i]);
        else if( aResult[i] )
        {
           printf("%d", aResult[i]);
           bStartOutput = true;
        }
    if(! bStartOutput )
    printf("0");
    return 0;
}

如你输入:
12345678900
98765432100
结果为:
1219326311126352690000
收到的鲜花
  • hjywyj2011-06-23 18:19 送鲜花  2朵  
2011-06-23 18:10
雨中芸
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
收藏
得分:0 
回复 3楼 Toomj
输出的时候能不能帮我弄简单点啊,直接用printf 可以吗?我刚刚学C,不是很懂哦!
2011-06-23 19:41
雨中芸
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-23
收藏
得分:0 
回复 3楼 Toomj
an2[j++] = szLine2[i] - '0';这是什么意思呢?后面的 - '0';是什么意思呢
2011-06-24 14:56
快速回复:两个超大整数的乘法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018523 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved