昨天做排列组合的时候遇到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. Android 第一篇——环境搭建

    下载Android SDK 下载eclipse 在线安装SDK

  2. 全局获取Context的技巧

    全局获取Context的技巧 在android开发中,非常多地方都要用到Context上下文这个类对象,比方:弹出 Toast 的时候须要.启动活动的时候须要.发送广播的时候须要.操作数据库的时候须要 ...

  3. C++ Primer 学习笔记_87_用于大型程序的工具 --异常处理

    用于大型程序的工具 --异常处理 引言: C++语言包括的一些特征在问题比較复杂,非个人所能管理时最为实用.如:异常处理.命名空间和多重继承. 相对于小的程序猿团队所能开发的系统需求而言,大规模编程[ ...

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

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

  5. material design是什么?(待以后学习)

    1.它的各种示例:http://blog.csdn.net/cike110120/article/details/46572071 2.它的讲解:http://www.androidchina.net ...

  6. Cocoapods安装步骤

    Cocoapods安装步骤 1.升级Ruby环境 终端输⼊入:$ gem update --system 此时会出现 ERROR: While executing gem ... (Gem::File ...

  7. Linux常用命令  新手必看

    文件和目录cd /home 进入 '/ home' 目录'cd .. 返回上一级目录cd ../.. 返回上两级目录cd 进入个人的主目录cd ~user1 进入个人的主目录cd - 返回上次所在的目 ...

  8. 带OpenSSL和MySQL的静态编译版本~

    http://www.npcglib.org/~stathis/blog/precompiled-qt4-qt5/ http://www.npcglib.org/~stathis/blog/preco ...

  9. Codeforces 435B. Pasha Maximizes

    简单贪心.... B. Pasha Maximizes time limit per test 1 second memory limit per test 256 megabytes input s ...

  10. Dockerfile指令总结

    指令的一般格式为INSTRUCTION arguments,指令包含FROM.MAINTAINER.RUN等. FROM 格式为FROM <image>或FROM <image> ...