昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤!

于是乎就自己研究了如何进行超大数的计算!

/*********************************************************************************
* Copyright: (C) 2013 Chen ZhenWei<ieczw@qq.com>
* All rights reserved.
*
* Filename: bignum.c
* Description: This file
*
* Version: 1.0.0(12/12/2013~)
* Author: Chen ZhenWei <ieczw@qq.com>
* ChangeLog: 1, Release initial version on "12/12/2013 08:21:23 AM"
*
********************************************************************************/ #include <stdio.h>
#include <string.h> int save_num(const char *str,unsigned short *num)
{
int i=0;
int length = strlen(str); for(i=0; i<length/2; i++)
{
// printf("%c == %c\n",str[length-1-i*2],str[length-2-i*2]);
num[i] = (str[length-1-i*2]-'0')+10*(str[length-2-i*2]-'0');
}
if(length%2 != 0)
{
num[i] = str[0] - '0';
return i+1;
}
return i;
} void main()
{
unsigned short numa[100];
unsigned short numb[100];
unsigned short result[200];
unsigned short carry;
int i=0,j=0,lena,lenb,res_len;
char strnum[64];
char flag; scanf("%s",strnum);
lena = save_num(strnum,numa);
//scanf("%c",&flag);
scanf("%s",strnum);
lenb = save_num(strnum,numb);
memset(result,0x0,200*2); for(i=0; i<lena; i++)
for(j=0; j<lenb; j++)
{
carry = numa[j] * numb[i];
result[j+i] += carry%100;
result[j+i+1] += carry/100;
}
res_len = j+i+1; for(i=0; i<res_len; i++)
{
if(result[i]>=100)
{
result[i+1] += result[i]/100;
result[i] = result[i]%100;
}
}
for(i=res_len; i>0; i--)
{
printf("%02d",result[i-1]);
} printf("\n"); }

设计思路:

操作结果:

【C语言】超大数乘法运算的更多相关文章

  1. 使用OC语言编写两个超大数相乘或相加的算法的思路和超大正整数相乘的代码

    正文: 在编程中,无论是OC还是C亦或是C++语言,所声明的整数变量都会在内存中占有固定的存储空间,而这些存储空间都是固定的. 比如我们知道的int.long.short.unsigend int.u ...

  2. C++语言-02-函数

    普通函数 C++是在C语言的基础上增加了面向对象特性的语言,是C语言的超集 C++中的普通函数与C语言中的普通函数具有类似的性质.请参照以下博客:C语言-04-函数 与类相关的函数 C是一种OOP语言 ...

  3. 2004: C语言实验——数日子(数组)

    2004: C语言实验——数日子 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 213  Solved: 111[Submit][Status][Web ...

  4. C语言-04-函数

    函数 函数是一组一起执行任务的语句,函数是一个可执行C程序必不可少的条件(至少一个main()函数),函数的定义形式 returnType functionName() { bodyOf of the ...

  5. 李洪强-C语言5-函数

    C语言函数 一.函数 C语言程序是由函数构成的,每个函数负责完成一部分的功能,函数将工恩呢该封装起来,以供程序调用. 二.函数定义 目的:将一些常用的功能封装起来,以供日后调用. 步骤:确定函数名,确 ...

  6. uva 10692 Huge Mods 超大数取模

    vjudge上题目链接:Huge Mods 附上截图: 题意不难理解,因为指数的范围太大,所以我就想是不是需要用求幂大法: AB % C = AB % phi(C) + phi(C) % C ( B ...

  7. C语言 猜数游戏--产生一个随机数

    #include <stdio.h> #include <time.h> #include <stdlib.h> int main(int argc, const ...

  8. C语言之一数三平方

    一数三平方 有这样一个六位数,它本身是一个整数的平方,其高三位和低三位也分别是一个整数的平方,如225625=475*475,225=15*15,625=25*25;统计所有符合该条件的六位数 源代码 ...

  9. c语言推断数是否是素数

    这是推断数是否是素数.网络版非常.我觉得有点问题.今天一个朋友问我这个问题.我知道,今天,我把自己的代码,非常实用哦!. #include<stdio.h> #include<mat ...

随机推荐

  1. 使用msys

    下载地址:http://msys2.github.io/ 更新:pacman -Syu 安装git:pacman -S git 或者使用cygwin 调色:编辑~/.minttyrc Foregrou ...

  2. Boost.Asio基础(三)

    Socket控制 以下的函数进行处理一些高级的socket选项: get_io_service():返回io_service实例 get_option(option):返回socket option对 ...

  3. CSDN排名第一和第二的人

    http://blog.csdn.net/phphot http://blog.csdn.net/yuanmeng001

  4. E - Phone List(字典序,string类型使用)

    Description Given a list of phone numbers, determine if it is consistent in the sense that no number ...

  5. c++,派生类对象可以对基类赋值,基类对派生类不可以赋值

    派生类对象可以对基类对象赋值,赋值时属于派生类独有的部分就舍弃不用. #include <iostream> using namespace std; class DemoA { publ ...

  6. ECSHOP常用函数

    lib_time.php gmtime() #获得当前格林威治时间的时间戳 /$0 server_timezone() #获得服务器的时区 /$0 local_mktime($hour = NULL ...

  7. 10个值得我们关注的python博客

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...

  8. android如何让service不被杀死-提高进程优先级

    1.在service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartCommand ...

  9. linux下C++开发工具

    就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...

  10. 保护DNS服务器3大方法

    保护DNS服务器3大方法       DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...